如何使用按钮启动和停止连续运行的后台工作者

soo*_*ise 6 c# backgroundworker winforms

假设我有一个像这样的后台工作者:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
             while(true)
             {
                  //Kill zombies
             }
        }
Run Code Online (Sandbox Code Playgroud)

如何让这个后台工作者开始和停止使用WinForm上的按钮?

Ste*_*don 17

也许你可以使用像这样的手动重复测试,我没有调试这个,但值得一试.如果它有效,你就不会让它在等待的时候旋转它的轮子

ManualResetEvent run = new ManualResetEvent(true);

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
     while(run.WaitOne()) 
     { 
         //Kill zombies 
     } 
} 

private void War() 
{ 
    run.Set();
} 

private void Peace() 
{ 
    run.Reset();
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*ith 8

使用CancelAsync方法.

backgroundworker1.CancelAsync();
Run Code Online (Sandbox Code Playgroud)

在你的工作线程里面的循环中.

if (backgroundWorker.CancellationPending) return;
Run Code Online (Sandbox Code Playgroud)

这不会立即发生.

  • +1:当'BackgroundWorker`类已经内置了这个功能时,我不明白为什么每个人都要检查`while(_someCustomBoolean)`. (6认同)