最近想弄個基於WPF的動態影集,主要思想就是一個Image控件顯示圖片,添加一個Timer定時設置每秒更新一張圖片。在弄的過程中發現一些小問題,在這里記下來留着以后查看!
1:設置Iamge的Source屬性的時候,在前台Xaml文件可以設置為路徑的字符串格式,但是在后台cs文件需要構造一個Bitmap的實例賦值給Image的Source屬性,還要注意實例化Uri類的時候需要傳進來一個UriKind.Relative的枚舉。如下:
Uri uri = new Uri("/Images/" + curImage,UriKind.Relative); BitmapImage bitmap = new BitmapImage(uri); myImage.Source = bitmap;
2:實現圖片每秒更新的時候,需要注意不能用一個timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);事件直接實現更新,會報出“調用線程無法訪問此對象,因為另外一個線程擁有此對象”的異常。
這時的解決方案是定義一個委托,用異步Dispatcher.Invoke()實現!如下所示:
private delegate void TimerDispatcherDelegate(); private void autoShow_Click(object sender, RoutedEventArgs e) { timer = new Timer(); timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.Interval = 1000; timer.Enabled = true; timer.Start(); } void timer_Elapsed(object sender, ElapsedEventArgs e) { this.Dispatcher.Invoke(DispatcherPriority.Normal, new TimerDispatcherDelegate(UpdataImage)); } void UpdataImage() { NextImage(imageList, imageIndex, curImage, uri); }
主界面代碼如下:http://www.cnblogs.com/PaulMa/admin/Files.aspx