【发布时间】:2017-08-19 17:51:24
【问题描述】:
我已经构建了一个使用Application.Run(new Form) 启动表单的应用程序。在应用程序中有以下线程函数
private void threadTask() {
while (true) {
Thread.Sleep(500);
if (isOn) {
Invoke((MethodInvoker) delegate { reloadData(tabControl.SelectedIndex); });
Invoke((MethodInvoker) delegate { onOffButton.BackColor = Color.Lime; });
Invoke((MethodInvoker) delegate { infoLabel.Visible = false; });
}
}
}
当我关闭应用程序时,我得到了这个异常:
抛出异常:“System.InvalidOperationException”在 System.Windows.Forms.dll
在 System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
我试图通过在表单关闭时调用Application.Exit() 来解决这个问题。该函数被执行,但是,在Application.Exit() 被调用后我仍然得到异常。
有什么办法可以解决这个问题吗?如何检查应用程序是否正在关闭?
【问题讨论】:
-
在 vs 中调试并检查 wich line throughs 异常。我猜你需要在退出应用程序之前终止线程
-
这很随机。我会遇到三个 Invoke 行中的任何一个,有时根本不会。
-
所以就像我说的你必须在退出应用程序之前终止它们
-
如果没有一个好的minimal reproducible example 能够可靠地重现问题,就无法给出好的、具体的答案。但是,您的问题实际上只是其他重复项的变体,其中您的代码在您开始退出应用程序后不应执行。由您来编写代码来协调想要访问 UI 对象的代码(例如,调用
Invoke())和使这成为不可能的代码(例如,退出应用程序)。
标签: c# multithreading winforms exception