我在 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/