c# - 跨线程的 CollectionChanged 通知?

标签 c# wpf multithreading

我正在使用 C#/WPF 编写下载管理器,我刚刚遇到了此错误:

This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread.

我的程序的基本流程是,一些网页/下载在开始时排队,然后异步下载。当 HTML 页面下载完成后,我会对其进行解析并查找更多要下载的内容,然后直接从工作线程中将其排入队列。

当我尝试在自定义队列类上发送 CollectionChanged 事件时,出现该错误。但是,我需要触发该事件以便 GUI 可以更新。

我有什么选择?

最佳答案

您可能想查看 Reactive Extensions来自微软,它们就是为这类事情而设计的。它们创建“可观察集合”,并且在并行和多核场景中很有用。

更新:

您还可以找到 SyncronizationContext也很有用。这是一个 Windows 窗体示例,但 WPF 也有一些变体。

关于c# - 跨线程的 CollectionChanged 通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785979/

相关文章:

c# - C# 中的 AES 加密(帮助)和 Java 中的解密(完成)

wpf - LiveCharts ColumnSeries 填充颜色

c# - 是否有一种干净的方法来处理 WPF 应用程序中的单位(度数、弧度等)转换

java - 假装同步的异步 websocket 机制

c - 等待条件变量时的信号计数器

c# - 向按钮添加新事件

c# - WPF SimpleCommand 可以使用泛型吗?

c# - DiagnosticDescriptor 构造函数的新参数的相关性?

Wpf:为什么 WriteableBitmap 变慢了?

c++ - 新线程上的应用程序崩溃开始