我倾向于使用它ThreadPool.QueueUserWorkItem
来加载图像,然后当操作完成时,我使用线程安全Dispatcher
对象回调UI线程.图像源不是线程安全的,你将不得不使用类似的东西JpegBitmapDecoder
,还有一个PngBitmapDecoder
.
例如:
public Window() { InitializeComponent(); ThreadPool.QueueUserWorkItem(LoadImage, "http://z.about.com/d/animatedtv/1/0/1/m/simp2006_HomerArmsCrossed_f.jpg"); } public void LoadImage(object uri) { var decoder = new JpegBitmapDecoder(new Uri(uri.ToString()), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); decoder.Frames[0].Freeze(); this.Dispatcher.Invoke(DispatcherPriority.Send, new Action(SetImage), decoder.Frames[0]); } public void SetImage(ImageSource source) { this.BackgroundImage.Source = source; }