gpt4 book ai didi

wpf - 数据绑定(bind)和锁定列表

转载 作者:行者123 更新时间:2023-12-03 10:18:44 25 4
gpt4 key购买 nike

我正在编写(我的第一个)WPF 应用程序,它搜索 Web 并在 ListBox 中显示链接。为了加快速度,我使用多个线程来下载链接。但是,我遇到了一个有趣的多线程困境:

假设我有 UI 线程,然后产生另外 2 个线程来下载链接。现在下载线程将链接添加到 List调用LinkList我的ListBox势必会。如果 Thread1 更新 LinkList然后 UI 线程尝试遍历 LinkList重新绑定(bind)ListBox .如果在 UI 线程迭代时,Thread2 尝试将项目添加到 LinkList ,在 UI 线程上会引发异常,因为您无法在迭代时将项目添加到列表中。

我不想等到所有线程都返回绑定(bind) ListBox,因为这意味着用户必须等待很长时间。有没有一种模式来处理这个?我可以以某种方式放置 lock围绕 UI 线程上的绑定(bind)迭代?

最佳答案

INotifyCollectionChanged 不是线程安全的(取消 INotifyPropertyChanged 行),因此您应该使用调度程序从 UI 线程添加项目,而不是在从工作线程向 LinkList 添加项目时

var objectToAdd = ...
Dispatcher.Invoke(new Action(() =>
{
LinkList.Add(objectToAdd);
}));

关于wpf - 数据绑定(bind)和锁定列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com