请求线程退出而不强制它?

时间:2009-11-03 02:41:40

标签: c# .net multithreading thread-safety

我正在写一个应用程序。有来自网络的DL资源的插件。如果用户想要退出,我不希望任何DL启动,但我希望DL继续进行直到完成。他们停下来后我会优雅地退出。

如何判断一个线程是在DL的中间还是只是在睡觉?实际的下载资源功能是在我的基类中,并不是虚拟的,所以我可以编写代码,说明它是否正在进行中,但除此之外。我如何实际将信息传递给主线程,说明它是否正在睡眠并将在下载过程中终止VS?

3 个答案:

答案 0 :(得分:3)

最好的方法是创建一个插件实现的接口,允许您查询它们的状态并请求它们停止正在执行的操作(如果您决定稍后添加该功能)。强烈建议不要使用Thread.Interrupt和Thread.Abort。 ThreadState是absolutely useless。他们不能保证工作,甚至可以让你的代码陷入困境,在无人管理的永远地带。通过创建标准化这些请求的界面,您可以确保插件开发人员提供报告状态和安全中止进度的机制。

如果您了解插件的开发者,我建议您阅读Jon Skeet的threading series

答案 1 :(得分:1)

由于您正在等待I / O资源(文件下载),因此您无法知道线程是否在I / O操作之前处于休眠状态,或者是否由于其他原因而处于休眠状态。

答案 2 :(得分:1)

您可以通过活动支持进度报告,增量结果和取消。 查看System.ComponentModel.BackgroundWorker

编辑:这是一个无耻的插件 看看Joe Duffy的“Windows上的并发编程”。 它详细地阐述了很多这些东西。