如何及时取消 BackgroundWorker 组件的后台工作

BackgroundWorker 提供的CancelAsync只是更改了属性值,实际上并未做任何的取消操作。当处理一个比较耗时的单个任务时,需要立即关闭后台线程,可采用如下做法。(注:BackgroundWorker 也不提供他当前工作线程的属性,其理由是它是随机从线程池中获取的线程,所以它也不清楚自己用的是哪个线程,这真的是个理由吗?)

定义线程变量workThread,并在doWrok方法中将当前的线程赋值给它。

 

Code

 

当需要终止该后台工作时,直接中断现场即可。

 

Code

 

注意:中断线程之后的BackgroundWorker 不可再使用,需要重新的初始化。

posted @ 2008-12-15 08:32  疯子峰  阅读(1410)  评论(2编辑  收藏  举报