6

是否有可能“杀死” a 的线程BackgroundWorker

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

请问我该怎么做?任何建议将不胜感激。

提前致谢。

4

2 回答 2

3

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

如果您需要完全控制线程,则必须使用Threadclass 自己创建它。

于 2009-05-22T13:41:28.193 回答
1

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

后台工作人员可以检查它是否应该取消并自行取消,但如果它关闭查询数据库,那么在它返回之前你无能为力。

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

于 2009-05-22T13:44:55.253 回答