0

我使用的是一个弹出窗口的控件。我有一个显示和隐藏它的方法,我需要实现一个功能,以防止在不同线程中显示和隐藏弹出窗口。我可以在非UI线程中显示弹出窗口吗?我怎样才能控制在什么线程中显示弹出窗口

更新

我的问题的主要目标是:

它,方法隐藏应该是在同一个线程不是从什么线程的方法Show启动重要。如何实现这一点?

public void Show() 
     { 
      IsShown = true; 
      if (this.ChildWindowPopup == null) 
      { 
       this.ChildWindowPopup = new Popup(); 
        try 
       { 
        this.ChildWindowPopup.Child = this; 
       } 
       catch (ArgumentException) 
       { 
        throw new InvalidOperationException("The control is already shown."); 
       } 
      }  
      if (this.ChildWindowPopup != null && Application.Current.RootVisual != null) 
      { 
       // Configure accordingly to the type 
       InitializeProgressType(); 
        // Show popup 
       this.ChildWindowPopup.IsOpen = true; 
      } 
     } 

public void Hide() 
     { 
      IsShown = false; 
      // Restore system tray 
      SystemTray.IsVisible = currentSystemTrayState; 
      this.progressBar.IsIndeterminate = false; 
      this.ChildWindowPopup.IsOpen = false; 
      } 
+0

当你隐藏时,你能简单地保存Thread.CurrentThread并检查它是否相同吗? 仍然 - 我会争辩说,这个问题表明另一个问题。你为什么要检查线程?如果目标是为某些操作显示进度条 - 您可以创建一些对象(令牌)来将进度条与操作相关联。我不明白为什么要按照您的建议来管理线程,而不是调试另一个问题。 – 2012-03-18 21:13:55

回答

0

一般在UI组件上工作只能在UI线程中完成。如果你想阻止从UI线程启动特定的弹出窗口,你需要提供一个接口来启动它,以便在内部检查它已经执行的线程 - 可能使用SynchronizationContext或Thread类,但最终它需要通过在UI线程上调用一个方法来显示Popup。

+0

我已经更新了我的问题) – revolutionkpi 2012-03-17 14:29:54

相关问题