
BackgroundWorker是对线程的一个简单包装,只起一个牵线搭桥的作用,具体的事都要你自己处理
比如你这里报告进度
首先,不是你把WorkerReportsProgress设为true它就会自动报告进度了。而是在DoWork事件处理器中,你觉得哪个时候该报告进度就调用一下BackgroundWorker.ReportProgress方法来触发ProgressChanged事件。

然后,在ProgressChanged事件中,关于工作进度的所有信息,BackgroundWorker不会自动给你填写的(它又不知道),需要你在调用ReportProgress提供。
具体的说,就是e.ProgressPercentage和e.UserState这两个东西,它就是调用reportProgress方法时你传递的参数。你调用的时候没传,那就是空的。backgroundworker
你这里很可能,一是根本没调用ReportProgress,或者是调用ReportProgress时没有给e.ProgressPercentage传值。

然后你取消工作的方法大概也不对。
CancelAsync这个方法只是对DoWork发出一个取消请求。
DoWork需要自己在适当的位置查询CancellationPending属性来获得这个请求。获得取消请求后,需要自己通过代码主动退出。有需要释放的资源先释放,没有的话就可以直接return。(并不是BackgroundWorker会自动帮你结束工作)
同时还要设置e.Cancel=true,这样在DoWorkerCompleted事件中才能区分工作是被取消了还是完成了。
你大概只是调用了CancelAsync(),DoWork中没有对应的响应代码。所以实际上工作没有被取消。backgroundworker
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27009-1.html
#宋茜##fx_4walls##fx组合#
记住
中国人民爱好和平