【发布时间】:2009-09-03 16:41:30
【问题描述】:
我知道你可以在第一次启动后台工作程序时通过 RunWorkerAsync 函数调用传递参数,但是你可以在它已经启动后传递数据吗?或者我是否需要创建自己的并发形式来处理从不同线程向其传递数据?
【问题讨论】:
标签: c# multithreading concurrency parameters backgroundworker
我知道你可以在第一次启动后台工作程序时通过 RunWorkerAsync 函数调用传递参数,但是你可以在它已经启动后传递数据吗?或者我是否需要创建自己的并发形式来处理从不同线程向其传递数据?
【问题讨论】:
标签: c# multithreading concurrency parameters backgroundworker
您需要添加一些同步,并为后台工作人员提供一个从中读取数据的位置。
您不能(轻松)向后台工作人员发送数据。有一个工作人员可以查找数据的地方要容易得多,您只需添加数据进行处理。只需确保在这一点上进行同步,因为(至少)两个线程可能会同时访问数据。
【讨论】:
BackgroundWorker API 中不支持在任务启动后传递额外数据的机制。
但是,工作例程只是在不同的线程上运行。您可以像在 2 个任意线程之间传递数据一样将数据传递给该线程。关于如何...
您应该仔细考虑这些方法的同步影响。
【讨论】:
我更喜欢使用一个静态队列,它是定期检查新消息的后台线程。这允许后台线程按照自己的节奏工作。您可以使用回调方法向主线程发出信号。就像 Reed 说的那样,使用同步,比如锁定一个静态对象。
【讨论】: