此BackgroundWorker当前正忙,无法同时运行多个任务

我得到这个错误,如果我点击一个button,启动backgroundworker两次。

This BackgroundWorker is currently busy and cannot run multiple tasks concurrently 

我怎样才能避免这一点?

简单:不要启动BackgroundWorker两次。

您可以通过使用IsBusy属性检查它是否已经在运行,所以只需更改以下代码:

 worker.RunWorkerAsync(); 

对此:

 if( !worker.IsBusy ) worker.RunWorkerAsync(); else MessageBox.Show("Can't run the worker twice!"); 

更新:

如果确实需要同时启动多个后台任务,则只需创build多个BackgroundWorker对象

为每个要执行的操作创build一个新的BackgroundWorker对象。 即,而不是:

 BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); for (int i; i < max; i++) { worker.RunWorkerAsync(i); } 

尝试这个:

 for (int i; i < max; i++) { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerAsync(i); } 

我会考虑排队需要完成的任务。 你有以下优点;

  • 由于别的东西已经在运行,你不必处理后台任务无法启动的问题
  • 您不必担心通过为每个任务创build新的背景来使用太多的线程。
  • 最后,队列可以让你确保后台任务按照创build/请求的顺序运行。

这是一个示例实现: http : //thevalerios.net/matt/2008/05/aqueued-backgroundworker 。 我不确定是否在线程安全的实现,我会更新我的答案,一旦我找出我当前正在使用的实现中的locking问题。