如何正确退出多线程程序

时间:2012-10-30 19:31:38

标签: c# multithreading aforge

我做了一个基于Aforge的程序(它是一个视频库) 该库为摄像机的下一个视频帧创建自己的刷新事件 到目前为止一直很好,早期的人帮我多线程,所以这些Aforge线程可以报告回主程序线程,再次到目前为止这么好,它工作得很好。

这里可以看到Te代码: how to do multithreading when using outside referenced code

但现在我经常注意到一个新的程序错误。
当我想退出程序时,问题就开始了 目前,Aforge线程可能仍处于活动状态 并且它想要回写关闭的主要表单。

不知何故,我需要在关闭程序之前停止其他线程 Aforge有一个选项可以做相机停止,但这还不够 但是我的代码仍然希望在已经关闭的主表单上写字。

有没有办法阻止所有线程,或某些安全路径从原始线程关闭? 我甚至将后面的报告放在主程序的try catch构造中,但它没有很好地工作,在这些情况下停止它的唯一方法是按下visual studio本身的stop stop按钮。

1 个答案:

答案 0 :(得分:2)

如果我理解您的问题,您可能会在关闭表单时在表单上发出Invoke电话。我也遇到过这种情况。

我做的是在我开始关闭表单时设置“关闭”变量,然后使用AppDomain.CurrentDomain.UnhandledException来监听InvalidOperationException(或者你得到的任何内容),以及如果设置了关闭,则忽略。