从线程中显示MessageBox,因为它来自C#/ WPF中的主线程

And*_*aló 4 c# wpf multithreading messagebox

有一个线程可以抛出异常,当它被捕获时,会显示某个消息框,然后软件关闭.

但问题是,由于它不是程序的主线程,当我显示消息框时,程序窗口保持空闲,供用户与之交互.与主窗口上方显示消息框不同,它不会锁定屏幕.我想避免这种情况.

我想知道最好的方法是什么.到目前为止,我想过使用某种线程通信(从未在C#中使用它)来从主线程中引出消息框.

提高线程:

Thread thread = new Thread(new ThreadStart(MyClass.MyMethod));
thread.IsBackground = true;
thread.Start();
Run Code Online (Sandbox Code Playgroud)

异常的捕获在各个部分MyMethod.它是一个线程,自程序启动以来一直在循环中运行不间断.异常的原因是网络错误.

Mik*_*oud 11

您可以在以下位置调用它Dispatcher:

Application.Current.Dispatcher.Invoke(() => MessageBox.Show(...));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这里可能存在某种重入危险:如果在显示`MessageBox`时可能发生此类异常(并且可能是,因为将创建嵌套消息循环),那么您可以结束显示多个消息框.我之前在应用程序中看到过这种情况,结果并不漂亮:在某些情况下,可以创建无穷无尽的新"MessageBox"对话框.小心.(注意:这不是针对这个特定的答案,而是针对这个问题.) (3认同)
  • 我使用了以下内容:`Application.Current.Dispatcher.Invoke(new Action(()=> MessageBox.Show("Error")));`现在要测试,不幸的是,它没有"锁定"屏幕.编辑:现在它工作,我只是在调试时弄乱了一些东西.谢谢! (2认同)