我想在DoWork之外取消BackgroundWorker,我已经试图找到一个答案,但我找不到方法,即时箭头,任何帮助都会被证明
private void Bw1_DoWork(object sender, DoWorkEventArgs e)
{
HeavyWork();
}
private void HeavyWork()
{
foreach (DataGridViewRow row in XX.Rows)
{
if (!Bw1.CancellationPending)
{
//DoThings
}
else
{
//CANCEL
}
}
}
答案 0 :(得分:1)
例如,要从UI线程中取消它,只需调用:
Bw1.CancelAsync();
您的工作线程在下次执行时会知道它:
if (!Bw1.CancellationPending)
您可能希望更改工作线程代码:
private void HeavyWork()
{
foreach (DataGridViewRow row in XX.Rows)
{
if (!Bw1.CancellationPending)
{
//DoThings
}
else
{
//CANCEL
}
}
}
...为:
private void HeavyWork()
{
foreach (DataGridViewRow row in XX.Rows)
{
if (Bw1.CancellationPending)
{
break;
}
// do things
}
}
...以便它更快地退出循环