问题描述
PrivateSubbackgroundWorker1_DoWork(ByValsenderAsSystem.Object,ByValeAsDoWorkEventArgs)HandlesBackgroundWorker1.DoWorkDimiAsIntegerFori=1To10If(worker.CancellationPending=True)Thene.Cancel=TrueExitForElseSystem.Threading.Thread.Sleep(500)worker.ReportProgress(i*10)EndIfNextEndSub我试了一下,如果e.Cancel=false或者删除,好像都不影响代码的执行效果,这是为什么???
解决方案
解决方案二:
e.Cancel=false不影响执行效果,应为默认值就是falsee.Cancel=true就会影响了
解决方案三:
e.Cancel=true终止操作,具体看帮助DoWork事件处理程序中的代码应定期检查CancellationPending属性值,并在该值为true时中止操作。出现这种情况时,可以将System.ComponentModel..::.DoWorkEventArgs的Cancel标志设置为true,同时将RunWorkerCompleted事件处理程序中的System.ComponentModel..::.RunWorkerCompletedEventArgs的Cancelled标志设置为true。
解决方案四:
这个是用来和RunWorkerCompleted事件通信的,不会改变代码的行为。如果你把它设置为True,就是告诉BackgroundWorker,我是因为用户发出了退出请求而退出的,也就是被取消了。这样,你在RunWorkerCompleted事件中才能区分工作是完成还是被取消了。(通过检查事件参数的Cancelled属性)。(BackgroundWorker不能自动区分这两种情况。不能说没有调用CancelAsync就是完成,调用了CancelAsync就是取消。因为即使调用了CancelAsync,代码也可以忽略掉他,自顾自地执行完毕。)