如果我单击一个启动backgroundworker两次的按钮,我会收到此错误.
This BackgroundWorker is currently busy and cannot run multiple tasks concurrently
Run Code Online (Sandbox Code Playgroud)
我怎么能避免这个?
Ori*_*rds 92
简单:不要两次启动BackgroundWorker.
您可以使用该IsBusy
属性检查它是否已在运行,因此只需更改此代码:
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
对此:
if( !worker.IsBusy )
worker.RunWorkerAsync();
else
MessageBox.Show("Can't run the worker twice!");
Run Code Online (Sandbox Code Playgroud)
更新:
如果确实需要同时启动多个后台任务,则只需创建多个BackgroundWorker对象即可
Jus*_* R. 53
为要执行的每个操作创建一个新的BackgroundWorker对象.即,而不是:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
for (int i; i < max; i++) {
worker.RunWorkerAsync(i);
}
Run Code Online (Sandbox Code Playgroud)
试试这个:
for (int i; i < max; i++) {
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync(i);
}
Run Code Online (Sandbox Code Playgroud)
我会研究排队需要完成的任务.您将获得以下优势;
以下是一个示例实现:http://thevalerios.net/matt/2008/05/a-queued-backgroundworker.我不确定是否在线程安全中实现,一旦我弄清楚我正在使用的实现中的当前锁定问题,我将更新我的答案.
归档时间: |
|
查看次数: |
63861 次 |
最近记录: |