确保所有线程都关闭或强行关闭线程?

问题描述:

我是一个伪造进程为 的WPF/C#应用程序单击按钮>启动线程以从网络摄像头API拍摄图片>实例化网络摄像头API> API启动回调线程>拍摄图片> API object is disposed确保所有线程都关闭或强行关闭线程?

这些步骤通常工作,除了Web Cam API的回调线程没有关闭的最后部分。所以,在我的任务管理器中,我总是会得到一个“幽灵”进程,它与我的基本WPF应用程序共享同一个名称。此外,再次调用同一个webcam API(拍第二张照片)失败了。

所以,我试图找到一种方法来确保我的根应用程序的所有线程都被强制关闭。有没有办法确保没有线程被遗留?

+0

暂停调试器并找出线程在做什么。 – SLaks

+0

线程是否明确设置为后台线程? –

如果在这些线程上将IsBackground设置为true,它们将在关闭时终止。

+2

但是,它不会解决潜在的问题。 – SLaks

+1

@SLaks:当然是这样,但这是在这里要求的。 (为了解决实际的问题,我可能会建议设置一个定时器,以便API调用可以超时并被中断) –

如果您的应用程序中有一个窗口,请将Application.ShutdownMode设置为OnMainWindowClose。当主窗口关闭时,这将终止任何正在运行的后台线程。通过编程方式,您可以调用Environment.Exit尽可能优雅地杀死所有线程(但如果不是),则退出应用程序。

如果您看到除主程序之外的某些ghost进程,它不是线程问题。您创建了其他进程来执行操作。杀了它。您的资源将被释放。当有更多问题时,您不必担心线程正在运行 - 其他进程挂在资源上。