我想加載幾個圖像異步到用戶界面。創建和更新用戶界面元素異步Wpf
加載圖像時(位圖是從路徑創建的),應該將圖像設置爲窗口上矩形的填充。
當我將Bitmapimage的創建也放在Dispatcher.Invoke方法中時,代碼就可以工作。但顯然,我想要花費大量工作(創建位圖),而不是調用。
我已經嘗試了幾個解決方案,其中包括backgroundworker,但我無法讓它工作。現在,我有以下代碼:
private void Window_ContentRendered(object sender, EventArgs e)
{
Thread loadThread = new Thread(new ThreadStart(LoadImagesAsync));
loadThread.Start();
}
private void LoadImagesAsync()
{
IEnumerable<string> images = System.IO.Directory.GetFiles(IMAGE_FOLDER, "*.jpg").Skip(_PageNumber * NUMBER_OF_IMAGES).Take(NUMBER_OF_IMAGES);
for (int i = 0; i < NUMBER_OF_IMAGES; i++)
{
var bitm = new BitmapImage(new Uri(images.ElementAt(i)));
this.Dispatcher.Invoke(() =>
{
Grid grid = (Grid)grd_photoBox.Children[i];
var rectangle = (from e in grid.Children.OfType<Rectangle>()
where e is Rectangle
select e).First();
ImageBrush brush = new ImageBrush(bitm);
rectangle.Fill = brush;
});
}
}
我得到以下異常:
The calling thread cannot access this object because a different thread owns it.
任何線索?
你能描述一下它是如何「不工作」當你把創建位圖的調用之外? – Kohanz 2013-03-19 17:40:15
無效的操作異常被拋出,我編輯我的問題 – middelpat 2013-03-19 17:42:40
我建議看看這個:http://stackoverflow.com/questions/1924408/invalid-cross-thread-access-issue – Kohanz 2013-03-19 18:00:16