MessageBox.Show可以导致跨线程exception吗?
我可以在子线程上调用MessageBox.Show
而不必担心跨线程exception吗? 我知道表面上的答案是“尝试并找出”,我做了,成功了,但我注意到Windows 7似乎不像Windows XP那样严格提出跨线程exception。
那么,它是否记录在任何地方,从子线程可以安全地做到这一点?
不,它不会导致任何“跨线程”exception。 那是因为MessageBox不是在UI线程上运行的类的成员。
如果您在没有所有者窗口的情况下调用MessageBox.Show("text")
,则会保存。 如果你调用MessageBox.Show
像MessageBox.Show(this,"text")
指定所有者窗口的东西是不同的。
我已经看到在Windows XP中你可以保存,但是在Windows 7中,如果所有者窗口在与调用MessageBox
的线程不同的线程中运行,则会遇到跨线程exception!
您可以安全地在单独的线程中抛出MessageBox。 但请记住,它只会阻止创建它的线程。 如果您正在使用WinForm应用程序而另一个线程调用MessageBox,那么表单仍然可以使用,用户可以忽略它。