gpt4 book ai didi

c# - 在 C# 中异步加载图像

转载 作者:行者123 更新时间:2023-11-30 12:13:49 25 4
gpt4 key购买 nike

我正在开发一个 C# WPF 应用程序,它加载大量图像并将其显示为缩略图。我想以多线程的方式来做。因此,我尝试实现一个 BackgroundWorker。

BackgroundWorker的DoWork()的代码:

string[] files = e.Argument as string[];
foreach (string file in files)
{
ImageModel image = new ImageModel();
image.FilePath = file;
_importWorker.ReportProgress(1, image);
_imageCollectionVM.Images.Add(image); // also tried this one in ReportProgress()
}

在我的 XAML 代码中,我绑定(bind)到 ImageModel 的 BitmapImage 属性。 (AsyncState=True 没有帮助。)在这里我得到这个错误:“DependencySource”和“DependencyObject”必须在同一个线程中。

<Image Source="{Binding BitmapImage}" />

如果我将其注释掉,图像似乎已导入但我无法访问它,例如通过在 ListView 中选择它。在它的 SelectionChanged 中它说这个对象被另一个线程拥有。

如何解决这些问题?提前致谢!

最佳答案

您必须将对 GUI 的更新编码到主线程。基本上你只能多线程从磁盘加载图像,但 GUI 的实际更新必须单线程完成。

有很多方法可以做到这一点,stackoverflow 上的许多问题都解决了这个问题。这里有一些可以帮助您入门的内容

Update UI from background Thread

Update BindingList<> from a background Thread?

Is it evil to update a pictureBox from a background C# thread?

如何为此使用 BindingList

How do you correctly update a databound datagridview from a background thread

关于c# - 在 C# 中异步加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11002385/

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