MessageBox.Show可以导致跨线程异常吗?

时间:2011-03-24 15:25:23

标签: c# winforms multithreading

我可以在子线程上调用MessageBox.Show而不必担心跨线程异常吗?我知道表面上的答案是“尝试并找出来”,这是我成功完成的,但我注意到Windows 7似乎对提高跨线程异常的要求不如Windows XP。

那么,是否记录了从子线程可以安全的任何地方?

3 个答案:

答案 0 :(得分:7)

如果您在没有所有者窗口的情况下致电MessageBox.Show("text"),则可以保存。 如果您拨打MessageBox.Show,请MessageBox.Show(this,"text")指定所有者窗口的内容不同。

我已经看到在Windows XP中你可以保存,但是在Windows 7中,如果所有者窗口在与你调用MessageBox的线程不同的线程中运行,则会遇到跨线程异常!

答案 1 :(得分:4)

不,它不会导致任何“跨线程”异常。那是因为MessageBox不是在UI线程上运行的类的成员。

答案 2 :(得分:1)

将MessageBox放在一个单独的线程中是安全的。但请记住,它只会阻止创建它的线程。如果您使用的是WinForm应用程序而另一个线程调用MessageBox,那么该表单仍然可以使用,用户可以忽略它。