我正在加載大量圖像並將其顯示爲縮略圖的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 <> –