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了呢?
{
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了呢?
解决方案 »
- DevExpress.XtraGrid.GridControl的GridView记录不会根据鼠标滚轮上下移动吗?
- C#如果扫描目的主机的UDP端口是不是打开的?
- excel导入问题
- 『求助』如何在AD里添加账户
- 为什么我点取消它也是退出啊?
- 关于数据的表示,怎么做好呢?
- 求打印机监控原理?
- 高手赐教:奇怪了,c#里面怎么没提供16进制小数转化成double类型的函数,如16进制1AB.12怎么用函数转化成对应的double类型数据。
- 关于DataGridViewComboBoxColumn
- httpwebRequest 取cookie 丢失一半啊!
- C#实现TextBox的自动匹配属性
- 问几个GC的问题,高手进!当然非高手也可以进来围观哈!
---------------------------------------
http://www.dotblogs.com.tw/billchung/archive/2009/05/30/8597.aspx你应该设置DoWork方法中 DoWorkEventArgs 这个参数的 Cancel 值然后在RunWorkerCompleted方法中 判断 RunWorkerCompletedEventArgs.Cancelled
其实,CancellationPending属性在btton2中为true,它在DoWork事件中也为true,而在RunWorkerCompleted事件中,就变成了false
到底CancellationPending这个属性哪些时候为true,哪些时候为flase ?
能看到它的原型吗?
{
this.isRunning = false;
this.cancellationPending = false;
this.OnRunWorkerCompleted((RunWorkerCompletedEventArgs) arg);
}可以看到 是AsyncOperationCompleted触发的 RunWorkerCompleted 而在触发前,强制将 CancellationPending 设置为false 了
[Browsable(false), SRDescription("BackgroundWorker_CancellationPending")]
public bool CancellationPending
{
get
{
return this.cancellationPending;
}
}
AsyncOperationCompleted 是在 DoWork 执行后,被执行它是个回调函数。