c# - 两个 BackgroundWorker,一个 List<T>

标签 c# wpf thread-safety

我需要让这 2 个线程在通用列表上不断工作,一个线程应该将项目添加到列表中,另一个线程应该“消耗”这些项目(只看它们,根据某些线程做需要做的事情项的属性,然后将其删除)。

注意:我是初学者,所以任何有关如何执行此操作的见解都将受到赞赏。

我在考虑 2 个带有 while(1) 循环的 BackgroundWorker(当然接受取消),并将 List 对象作为参数传递给两者。

这可能/安全吗?我应该怎么做才能确保安全?

(如果您需要更多信息,请在评论中说明,我会进行编辑)

谢谢!

最佳答案

不安全。您将需要锁定阅读和写作。这是典型的生产者/消费者问题。

http://blogs.msdn.com/b/csharpfaq/archive/2010/08/12/blocking-collection-and-the-producer-consumer-problem.aspx

如果您使用的是 .NET 4,则可以在此处有效地使用 BlockingCollection。

关于c# - 两个 BackgroundWorker,一个 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7651470/

相关文章:

c++ - boost 等效于 ManualResetEvent?

c# - C# 中的线程安全属性

c# winforms均匀分布3个控件

c# - 在 gridview 中绑定(bind)标签文本

c# - C++ 中的 <map> 的 C# 等价物是什么?

wpf - WrapPanel 在水平方向的 StackPanel 中不换行

c# - 如何在 WPF C# 中绑定(bind)到类本身

c# - C#Console.SetOut跨线程操作无效

wpf - 为什么覆盖 WPF Window.OnRender 方法无法绘制到屏幕?

c# - C# 中类似 Java 的线程同步