+ -
当前位置:首页 → 问答吧 → 请问,这个 backgroundWorker异步执行

请问,这个 backgroundWorker异步执行

时间:2011-12-26

来源:互联网

private void button1_Click(object sender, EventArgs e)
  {
  backgroundWorker1.RunWorkerAsync(); //开始异步执行
  }
  private void button2_Click(object sender, EventArgs e)
  {
  backgroundWorker1.CancelAsync(); //button2取消异步执行
  MessageBox.Show(backgroundWorker1.CancellationPending.ToString()); //输出值为true
  }
  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  {  
  Thread.Sleep(10000);
  }
  private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
  MessageBox.Show(backgroundWorker1.CancellationPending.ToString()); //输出值为false  
  }


问题:
button2取消异步执行时,backgroundWorker的CancellationPending属性为true,可是在异步执行结束的事件RunWorkerCompleted中,CancellationPending属性为什么变成false了呢?

作者: rrcscvs2   发布时间: 2011-12-26

hello..........

作者: rrcscvs2   发布时间: 2011-12-26

當DoWork事件執行完畢進入RunWorkerCompleted事件後,BackgroundWorker的CancellationPending屬性值將會恢復為False
---------------------------------------
http://www.dotblogs.com.tw/billchung/archive/2009/05/30/8597.aspx

你应该设置DoWork方法中 DoWorkEventArgs 这个参数的 Cancel 值

然后在RunWorkerCompleted方法中 判断 RunWorkerCompletedEventArgs.Cancelled

作者: Sandy945   发布时间: 2011-12-26

之前的那篇文章已经将关键点说出来了, VB 代码不理解的话,看这个

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

作者: Sandy945   发布时间: 2011-12-26

引用 3 楼 sandy945 的回复:

之前的那篇文章已经将关键点说出来了, VB 代码不理解的话,看这个

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

英文啊,看不懂诶

作者: rrcscvs2   发布时间: 2011-12-26

简单的说就是在 DoWork 方法中,要检查CancellationPending 属性

当CancellationPending 为true 时,设置 DoWorkEventArgs.Cancel 为 true

并停止执行 DoWork 中的代码, 

在 RunWorkerCompleted 方法中

根据RunWorkerCompletedEventArgs.Cancelled 来检查是否停止

作者: Sandy945   发布时间: 2011-12-27