重启背景工作者

Mar*_*arc 4 .net c# backgroundworker

有没有办法直接"重启"后台工作人员?调用CancelAsync()后跟RunWorkerAsync()显然不会这样做,因为他们的名字暗示.

背景信息:我有一个后台工作者,它在我的.net 2.0 Windows窗体应用程序中计算总数.每当用户修改任何属于此总数的值时,我都想重新启动后台工作程序,以防它运行,以便直接考虑最新值.

Pon*_*dum 9

backgriound工作本身不做任何改造.

当您调用bgw.CancelAsync它时,在后台工作程序上设置一个标志,您需要在DoWork处理程序中检查自己.

就像是:

bool _restart = false;

private void button1_Click(object sender, EventArgs e)
{
    bgw.CancelAsync();
    _restart = true;
}

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{

    for (int i = 0; i < 300; i++)
    {
        if (bgw.CancellationPending)
        {
            break;
        }
        //time consuming calculation
    }
}

private void bgw_WorkComplete(object sender, eventargs e)  //no ide to hand not sure on name/args
{
    if (_restart)
    {
        bgw.RunWorkerAsync();
        _restart = false;
    }

}
Run Code Online (Sandbox Code Playgroud)