2016-01-22 107 views
4

我试图使用Dispatcher.Invoke显示另一个ThreadMessageBoxWPF跨线程消息框不阻止主线程输入

MessageBox确实出现了。但是,如果不点击MessageBox上的OK按钮,我仍然可以控制主窗口。

我在想点击OK按钮之前是否有办法阻止主窗口输入?

任何帮助表示赞赏。

代码我到目前为止有:

void ShowError(String message) //I call this function in another thread 
{ 
    if (this.Dispatcher.CheckAccess()) 
     MessageBox.Show(message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
    else 
    { 
     this.Dispatcher.Invoke(
      new Action(() => 
      { 
       MessageBox.Show(message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
      })); 
    } 
} 
+0

您是否从调用ShowError的代码或包含ShowError的类引用窗口? –

+0

是的,让我试试你的解决方案。 :) – J3soon

回答

6

只有这样,才能保证消息框块窗口是通过传递窗口消息框。

void ShowError(String message, Window windowToBlock) //I call this function in another thread 
{ 
    if (this.Dispatcher.CheckAccess()) 
     MessageBox.Show(windowToBlock, message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
    else 
    { 
     this.Dispatcher.Invoke(
      new Action(() => 
      { 
       MessageBox.Show(windowToBlock, message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
      })); 
    } 
} 
+0

谢谢,这个作品!我不知道[MessageBox.Show](https://msdn.microsoft.com/en-us/library/ms598703%28v=vs.110%29.aspx)方法有一个'owner'参数。 – J3soon