使用BackgroundWorker处理多个操作

时间:2011-06-10 12:42:40

标签: c# winforms multithreading datagridview backgroundworker

我在winform上有一个DataGridView。我在表单的加载方法中动态添加DatagridViewButtonColumn,按钮名称为btnAction,文本显示为“Process”。

因此,网格中的每一行都会在最后一列中显示此“处理”按钮。

在此按钮的单击事件上,我使用BackgroundWorker调用执行某些计算的方法。计算结束后,我需要将单击按钮的文本更新为网格中该行中的“已处理”。现在,我该如何处理这种情况? - > 用户点击多个Process按钮,我需要触发网格中所有相应行的计算。可以使用BackgroundWorker处理它还是我需要在这里使用线程?

请尽可能协助处理代码段。

3 个答案:

答案 0 :(得分:2)

简短的回答是,在运行时无法再次调用相同的BackgroundWorker。如果这样做,您将收到错误:

  

此BackgroundWorker目前正在进行中   忙,无法运行多个任务   同时进行。

此问题已在StackOverflow上进行了讨论:This BackgroundWorker is currently busy and cannot run multiple tasks concurrently

您需要做的是为每个按钮创建一个新的后台工作程序或为后台工作程序请求排队。有一个排队的后台工作程序实现here

无论你采用哪种方式,你都需要注意你编写的代码都是线程安全的。

答案 1 :(得分:0)

我在使用BackgroundWorker流程时遇到了类似的情况。

以下Codeproject文章帮助我解决了很多问题。

http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads.aspx

答案 2 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.runworkercompleted(v=vs.85).aspx

将向您展示如何处理backgroundworker.runworkercompleted事件,该事件可以让您在完成背景工作后执行某些操作(无论是错误还是完成,您都必须检查)。