我制作了一个基于Aforge(它是一个视频库)的程序。该库为相机的下一个视频帧创建自己的刷新事件。到目前为止一切顺利,早期的人们已经帮助我进行了多线程处理,因此这些 Aforge 线程可以向主程序线程报告,再次到目前为止一切顺利,效果很好。
代码可以在这里看到:how to do multithreading when using outside referenced code .
但现在我经常注意到一个新的程序错误。当我想退出程序时,问题就开始了。目前 Aforge 线程可能仍然处于事件状态。它想要写回已关闭的主窗体。
不知何故,我需要在关闭程序之前停止另一个线程。 Aforge 中有一个选项可以执行诸如相机停止之类的操作,但这还不够。但我的代码仍然想在已经关闭的主窗体上写入。
有没有办法停止所有线程,或者有某种安全的方法来关闭原始线程?我什至将向主程序的返返回告放置在 try catch 构造中,但效果不佳,在这些情况下停止它的唯一方法是按下 Visual Studio 本身内的停止执行按钮。
最佳答案
如果我正确理解您的问题,则当您关闭表单时,您的表单上可能会发生 Invoke
调用。我也遇到过这种情况。
我所做的是在开始关闭表单时设置一个“shutdown”变量,然后使用AppDomain.CurrentDomain.UnhandledException
来监视InvalidOperationException
(或者你得到的任何东西),如果设置了关闭则忽略。
关于c# - 如何正确退出多线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146339/