我正在加载大量图像并将其显示为缩略图的C#WPF应用程序。我想用多线程的方式来完成它。所以我试图实现一个BackgroundWorker。在C#中加载异步图像#
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代码我绑定到ImageModel的BitmapImage的财产。 (AsyncState = True并没有帮助。)在这里我得到这个错误:“DependencySource”和“DependencyObject”必须在同一个线程中。
<Image Source="{Binding BitmapImage}" />
如果我发表评论,图片似乎已被导入,但我无法访问它,例如,通过在ListView中选择它。在它的SelectionChanged中它表示这个对象被另一个线程拥有。
我该如何解决这些问题?提前致谢!
我想我必须使用'this.Dispatcher'的'BeginInvoke'方法,对吗?实际上,我已经有一个ObservableCollection,我将ListView的项目源(已更新的原始帖子)绑定到该ObservableCollection。但是如果我在'Action内执行'imageCollectionVM.Images.Add(image)',我得到了“DependencySource和DependencyObject应该在同一个线程中”的错误信息。 – Sentropie
如果您正在尝试使用ObservableCollection,请参阅我在答案中发布的最后一个链接,它具有可从后台线程更新的BindingList <> –