我有一个名为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方法,该方法会将它们放入队列中?
答案 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?