gpt4 book ai didi

wpf - MVVM、线程和图像源 DataBinidng

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

我有一个 MVVM 实现,其中有一个 WPF ListBox,它将包含一组子 WPF Image 控件。每个控件的 Source 可能每秒更改 3 次。当我的列表中只有一张图片时,生活是美好的,我的应用程序是响应式的。当我开始有 4 或 5 个我的应用程序子图像时,我的应用程序开始打磨,我还应该提到,我必须为我拥有的每个新的和/或更新的图像进行 Bitmap 到 BitmapSource 的转换。

我应该如何更新我的子控件 Source 属性,同时让我的应用程序尽可能地响应?

这是我的 ViewModel 中的当前代码:

public BitmapSource CameraBitmapSource
{
get
{
Application.Current.Dispatcher.BeginInvoke((Action)delegate
{
BuildImageSource();
}, DispatcherPriority.Background);

return this.cameraBitmapSource;
}
}

BuildImageSource() 是我获取新位图并转换为 BitmapSource 然后分配给我的私有(private) cameraBitmapSource 对象的地方。

最佳答案

因为你使用 Dispatcher.BeginInvoke ,您正在 UI 线程上完成所有工作,这会使您的应用程序无响应。您应该在单独的线程上构建图像。最简单的方法是使绑定(bind)异步,并调用您的 BuildImageSource直接方法。

查看型号

public BitmapSource CameraBitmapSource
{
get
{
BuildImageSource();
return this.cameraBitmapSource;
}
}

XAML
<Image Source="{Binding CameraBitmapSource, IsAsync=True}" />

只要记住 Freeze ImageSourceBuildImageSource这样它就可以在 UI 线程上使用( DependencyObjects 只能在创建它们的线程上使用,除非它们是 Freezable 并卡住)

关于wpf - MVVM、线程和图像源 DataBinidng,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6209792/

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