是否有可能杀死BackgroundWorker的线程?

时间:2009-02-12 22:36:24

标签: .net multithreading backgroundworker

是否有可能“杀死”BackgroundWorker

的主题

在我的DoWork事件中,我无法检查取消标记,因为我有阻止 调用外部COM接口或查询数据库。 CancelAsync不会取消对COM的调用。

我该怎么办呢?任何建议都将非常感谢。

提前致谢。

2 个答案:

答案 0 :(得分:3)

不,你不能杀死BackgroundWorker线程,你只能尝试取消它,因为你注意到了,但它需要来自后台线程本身的一些交互来停止工作:“工人代码应定期检查CancellationPending属性,看它是否已设置为true。“(c)MSDN

如果您需要完全控制线程,则必须使用Thread类自行创建。

答案 1 :(得分:1)

我不知道中止线程的安全方法。

后台工作者可以检查它是否应该取消并取消它自己,但如果它不在查询数据库,那么在它返回之前你几乎无能为力。

你可以在ThreadPool线程上工作,只是放弃线程并启动另一个线程,如果不再需要它(确保当它从db查询返回时它检查它是否应该在做任何讨厌的事情之前取消)。当然,您需要平衡性能并管理线程同步。如果沿着这条路走下去,你可以看一下Interlocked静态类来进行有效的临界区锁定。