作为一般规则,您不应该在主/应用程序线程之外进行 GUI 工作。我会在可以执行调用的父窗体上创建一个 ShowMessageBox 方法:
public DialogResult ShowMessageBox (String message, String caption)
{
if (this.InvokeRequired) {
return (DialogResult) this.Invoke (new PassStringStringReturnDialogResultDelegate (ShowMessageBox), message, caption);
}
return MessageBox.Show (this, message, caption);
}
public delegate DialogResult PassStringStringReturnDialogResultDelegate (String s1, String s2);
但也要记住:调试多线程 GUI 应用程序时,并且您在主/应用程序线程以外的线程中进行调试,您需要关闭“启用属性评估和其他隐式函数调用”选项,或者否则 VS 将自动从当前线程中获取本地/全局 GUI 对象的值,这将导致您的应用程序以奇怪的方式崩溃/失败。转到工具->选项->调试以关闭该设置。
对上限感到抱歉,但这花了我几天的时间来弄清楚为什么我每次尝试调试我的应用程序都会挂起然后崩溃。