2009-09-03 104 views

回答

3

您需要添加一些同步,并让后台工作人员从中读取数据。

您不能(轻松地)将数据发送给后台工作人员。只需要有一个工作人员可以查找数据的地方,并且只需添加数据即可处理。因为(至少)两个线程可能在同一时间访问数据,所以请确保在该点上进行同步。

+0

这就是我认为的,那么Skeets先生有没有更好的生产者/消费者的例子? http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml – SwDevMan81 2009-09-10 11:38:04

+0

他是一个非常干净,狭隘的选择。在某些情况下,可能会使用ReaderWriterLock,这可能会更好(但只在某些情况下),因为它不会阻止读者。请参阅:http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx – 2009-09-10 11:40:40

+0

太好了,我会检查一下,看看我能否使用它。谢谢 – SwDevMan81 2009-09-10 11:43:53

2

在任务启动后,BackgroundWorker API内不支持传递额外数据的机制。

但是,工作程序只是在不同的线程上运行。您可以将数据传递到该线程,就像在两个任意线程之间传递数据一样。一对夫妇对如何简单的例子......在静态变量

  • 状态变化(可能是邪恶的)开始向下传递到工人日常的对象
  • 状态改变(还是有点邪如果控制不当)

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

0

我更喜欢使用静态队列来定期检查新消息的后台线程。这允许后台线程按照自己的步调工作。您可以使用回调方法发回主线程。就像里德所说的,使用同步,比如一个静态对象来锁定。

相关问题