[求助] 一个关于 BackgroundWorker 类的问题
大家好,我最近开始研究这个类。看了一点关于这方面的介绍,发现了一点问题,所以来请教一下。
这个类在网上有很多例子,100%的都是在这个类的DoWork里运行这样一段代码
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (double d = 599999999 ; d >= 0; d--)
{
//bw.CancellationPending默认为false
//想取消后台程序就执行bw.CancelAsync(),bw.CancellationPending就为true了
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}
if (d == 0)
{
MessageBox.Show("Completed!");
}
}
}
大家可以看到在循环过成中可以不停的判断用户是否做了取消后台的操作,但是实际中DoWork往往不是一个循环体的,比果是执行一段要运行很久的sql,那用户在sql执行过程中想取消后台的sql执行,那又怎么办呢?如何在不能循环判断bw.CancellationPending的情况下退出DoWork事件呢?
{
for (double d = 599999999 ; d >= 0; d--)
{
//bw.CancellationPending默认为false
//想取消后台程序就执行bw.CancelAsync(),bw.CancellationPending就为true了
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}
if (d == 0)
{
MessageBox.Show("Completed!");
}
}
}