使用什么类型的队列?
What type of queue to use?
我有一个名为 Monitor 的静态 class,它包含一个方法 LogToMonitor。
public static void LogToMonitor(MonitorDevice device, MonitorCategory category, MonitorType type, string msg)
它创建一个 MonitorEntry 类型并更新一个 属性,它对 UI 进行 属性 更改并添加到一个 ObservableCollection。
public ObservableCollection<MonitorEntry> MonitorEntries { get; }
我现在有另一个线程需要 LogToMonitor。这将导致具有多个调用线程的问题。我在想我应该采用生产者消费者方法。
我应该使用什么类型的集合?
队列是否应该是一个单独的 class 来处理调用并更新 UI?
我可以让多个线程仍然调用 LogToMonitor 方法,将它们放入队列吗?
BlockingCollection<T>
可能是您要查找的内容。它是生产者-消费者模式的实现。 https://docs.microsoft.com/en-us/dotnet/standard/collections/thread-safe/blockingcollection-overview
ObservableCollection 不是线程安全的,因此您可以 运行 进入异常。查看 Robert Fraser 的 post,他已经 post 编辑了线程安全 ObservableCollection 的代码。使用它而不是标准实现,多线程应该不会有问题。 How to make ObservableCollection thread-safe?
我有一个名为 Monitor 的静态 class,它包含一个方法 LogToMonitor。
public static void LogToMonitor(MonitorDevice device, MonitorCategory category, MonitorType type, string msg)
它创建一个 MonitorEntry 类型并更新一个 属性,它对 UI 进行 属性 更改并添加到一个 ObservableCollection。
public ObservableCollection<MonitorEntry> MonitorEntries { get; }
我现在有另一个线程需要 LogToMonitor。这将导致具有多个调用线程的问题。我在想我应该采用生产者消费者方法。
我应该使用什么类型的集合?
队列是否应该是一个单独的 class 来处理调用并更新 UI?
我可以让多个线程仍然调用 LogToMonitor 方法,将它们放入队列吗?
BlockingCollection<T>
可能是您要查找的内容。它是生产者-消费者模式的实现。 https://docs.microsoft.com/en-us/dotnet/standard/collections/thread-safe/blockingcollection-overview
ObservableCollection 不是线程安全的,因此您可以 运行 进入异常。查看 Robert Fraser 的 post,他已经 post 编辑了线程安全 ObservableCollection 的代码。使用它而不是标准实现,多线程应该不会有问题。 How to make ObservableCollection thread-safe?