有没有办法在启动后将数据发送到BackgroundWorker?

时间:2009-09-03 16:41:31

标签: c# multithreading concurrency parameters backgroundworker

我知道你可以在第一次启动backgroundworker时通过RunWorkerAsync函数调用传递参数,但是你可以在它已经启动后传递它吗?或者我是否需要创建自己的并发形式来处理从不同的线程传递数据?

3 个答案:

答案 0 :(得分:3)

您需要添加一些同步,并为后台工作者提供从中读取数据的位置。

您无法(轻松)向后台工作人员发送数据。只有工作人员可以查找数据的地方要容易得多,而且您只需添加数据即可处理。只需确保在该点上实现同步,因为(至少)两个线程可能同时访问数据。

答案 1 :(得分:2)

BackgroundWorker API中没有支持的机制在任务启动后传递其他数据。

然而,worker例程只是在不同的线程上运行。您可以将数据传递到该线程,就像在两个任意线程之间传递数据一样。关于如何......的几个简单例子。

  • 静态变量的状态变化(可能是邪恶的)
  • 对象的状态更改最初传递给工作程序(如果控制不当,仍然有点邪恶)

您应该仔细考虑这些方法的同步影响。

答案 2 :(得分:0)

我更喜欢使用静态队列来定期检查新消息的后台线程。这允许后台线程按照自己的进度工作。您可以使用回调方法向主线程发送信号。和Reed说的一样,使用同步,例如静态对象来锁定。