使用哪种类型的队列?

时间:2019-01-07 14:09:33

标签: c# producer-consumer

我有一个名为Monitor的静态类,其中包含LogToMonitor方法。

public static void LogToMonitor(MonitorDevice device, MonitorCategory category, MonitorType type, string msg)

它将创建MonitorEntry类型并更新属性,该属性将对UI进行属性更改并添加到ObservableCollection。

 public ObservableCollection<MonitorEntry> MonitorEntries { get; }

我现在有另一个需要LogToMonitor的线程。这将导致具有多个调用线程的问题。我想我应该采用生产者消费者方法。

我应该使用哪种类型的收藏集?

队列应该是处理呼叫并更新UI的单独类吗?

我是否可以有多个线程仍在调用LogToMonitor方法,该方法会将它们放入队列中?

2 个答案:

答案 0 :(得分:2)

BlockingCollection<T>可能就是您想要的。这是生产者-消费者模式的实现。 https://docs.microsoft.com/en-us/dotnet/standard/collections/thread-safe/blockingcollection-overview

答案 1 :(得分:0)

ObservableCollection不是线程安全的,因此您可能会遇到异常。检查Robert Fraser的帖子,他已经发布了线程安全的ObservableCollection的代码。使用它代替标准实现,并且多线程应该不会出现问题。 How to make ObservableCollection thread-safe?