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

我可以在子线程上调用MessageBox.Show而不必担心跨线程exception吗? 我知道表面上的答案是“尝试并找出”,我做了,成功了,但我注意到Windows 7似乎不像Windows XP那样严格提出跨线程exception。

那么,它是否记录在任何地方,从子线程可以安全地做到这一点?

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

如果您在没有所有者窗口的情况下调用MessageBox.Show("text") ,则会保存。 如果你调用MessageBox.ShowMessageBox.Show(this,"text")指定所有者窗口的东西是不同的。

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

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