从DoWork外部取消BackgroundWorker

时间:2017-03-16 05:47:38

标签: c#

我想在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
                }
    }  
}

1 个答案:

答案 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
    }  
}

...以便它更快地退出循环