c# - 如何正确退出多线程程序

标签 c# multithreading aforge

我制作了一个基于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/

相关文章:

java - 在自己的线程中执行类

c# - 在录制视频ffmpeg中增加fps

multithreading - 多线程 AForge.NET 培训

c# - 通过运行时加载 XAML XML?

c# - 通过 C# 打开 VB 程序时日期格式不正确

c++ - 获取一个 std::thread 以分离并终止自身

opencv - 错误检测 根据电路板图像进行 PCB 基准检测

c# - 无法完全抽象数据访问方法

c# - 为什么 Main 还没有回来?

c++ - std::exception 在信号处理程序中调用 exit 时在全局线程对象上发生