是否可以重用backgroundworker对象?

我有一个按钮“刷新”,每次我点击它我希望我的backgroundworker对象工作。

我用

if (main_news_back_worker.IsBusy != true) { // Start the asynchronous operation. main_news_back_worker.RunWorkerAsync(); } private void main_news_back_worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { show_system_urls(urls); displayNewMes(newMes, newStock, newSource); displayOldMes(oldMes, oldStock); } 

我第一次使用backgroundworker它工作得很好,也可以运行RunWorkerCompleted并完成他的工作。 但是第二次尝试运行对象时,对象的is_busy属性为’true’,我无法再次运行该对象…

每次我想运行它时,我是否需要创建一个新的背景工作者? 我该怎么做? 谢谢。

是没有问题。 但是,您必须确保在BGW忙时用户无法再次单击该按钮。 通过设置Enabled属性轻松完成,停止按钮操作并为用户提供出色的视觉反馈。 试试这个例子:

  private void button1_Click(object sender, EventArgs e) { button1.Enabled = false; backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { System.Threading.Thread.Sleep(2000); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { button1.Enabled = true; } 

但是第二次尝试运行对象时,对象的is_busy属性为’true’

这意味着第一个后台操作仍在运行。

您首先必须决定是否要同时进行其中两项操作。

如果否,请执行取消,以便您可以停止(然后重新启动)Bgw。

如果是,请每次创建一个新的Bgw。

虽然你可以重新使用Bgw,而这在第一种情况下是有意义的,但这样做并没有很大的节省。 Bgw Thread来自ThreadPool,无论如何都会重复使用。