我做了一个基于Aforge的程序(它是一个视频库) 该库为摄像机的下一个视频帧创建自己的刷新事件 到目前为止一直很好,早期的人帮我多线程,所以这些Aforge线程可以报告回主程序线程,再次到目前为止这么好,它工作得很好。
这里可以看到Te代码: how to do multithreading when using outside referenced code
但现在我经常注意到一个新的程序错误。
当我想退出程序时,问题就开始了
目前,Aforge线程可能仍处于活动状态
并且它想要回写关闭的主要表单。
不知何故,我需要在关闭程序之前停止其他线程
Aforge有一个选项可以做相机停止,但这还不够
但是我的代码仍然希望在已经关闭的主表单上写字。
有没有办法阻止所有线程,或某些安全路径从原始线程关闭? 我甚至将后面的报告放在主程序的try catch构造中,但它没有很好地工作,在这些情况下停止它的唯一方法是按下visual studio本身的stop stop按钮。
答案 0 :(得分:2)
如果我理解您的问题,您可能会在关闭表单时在表单上发出Invoke
电话。我也遇到过这种情况。
我做的是在我开始关闭表单时设置“关闭”变量,然后使用AppDomain.CurrentDomain.UnhandledException
来监听InvalidOperationException
(或者你得到的任何内容),以及如果设置了关闭,则忽略。