使用BackgroundWorker处理多个操作

本文关键字:操作 处理 BackgroundWorker 使用 | 更新日期: 2023-09-27 17:59:02

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

因此,网格中的每一行都会在最后一列中有"处理"按钮。

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

如果可能的话,请提供代码片段帮助。

使用BackgroundWorker处理多个操作

简单的答案是,同一个BackgroundWorker在运行时不能再次调用。如果你这样做,你会得到一个错误:

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

这个问题已经在StackOverflow上讨论过了:这个BackgroundWorker当前很忙,无法同时运行多个任务

您需要做的是为每个按钮创建一个新的后台工作程序,或者对后台工作程序请求进行排队。这里有一个排队的后台工作者实现。

无论你走哪条路,你都需要小心,你写的代码都是线程安全的。

我在使用BackgroundWorker进程时遇到了类似的场景。

下面的代码项目文章帮了我很多忙

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

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

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