我正在写一个应用程序。有来自网络的DL资源的插件。如果用户想要退出,我不希望任何DL启动,但我希望DL继续进行直到完成。他们停下来后我会优雅地退出。
如何判断一个线程是在DL的中间还是只是在睡觉?实际的下载资源功能是在我的基类中,并不是虚拟的,所以我可以编写代码,说明它是否正在进行中,但除此之外。我如何实际将信息传递给主线程,说明它是否正在睡眠并将在下载过程中终止VS?
答案 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上的并发编程”。 它详细地阐述了很多这些东西。