c# - 使用 BackgroundWorker 处理多个操作

标签 c# winforms multithreading datagridview backgroundworker

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

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

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

如果可能,请协助提供代码片段。

最佳答案

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

This BackgroundWorker is currently busy and cannot run multiple tasks concurrently.

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

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

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

关于c# - 使用 BackgroundWorker 处理多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6306503/

相关文章:

c# - 相当于库 (DLL) 的 'app.config'

c# - 更改程序集/文件版本后保留用户设置

c# - Window 服务中的线程池?

c# - 使用 Unity 容器进行 MVC 单元测试

c# - SharpSvn:如何查看 Update() 的结果?

c# - 如何从 Windows 窗体连接到 MySQL?

C# 计时器不会滴答作响

c++ - 使用多线程在 GNU C 中使用 Write Function 是否安全

.net - 这个类的更好的线程模型?

c# - 计算 FFT 相关系数