跳到主要內容

發表文章

目前顯示的是 4月, 2016的文章

[WPF][Error] Must create DependencySource on same Thread as the DependencyObject

今天使用程式產生了一張BitmapImage的圖片 當要將圖片assign 給Form 的成員變數時卻遇到下面的錯誤訊息 Exception: Must create DependencySource on same Thread as the DependencyObject. 由於圖片是透過 worker thread  產生的, 上網爬文後才知道這麼做其實很危險 最保險的方法還是從   resource    裡把圖片load 進來 另一個解法: BitmapImage  有一個 function   Freezable()    ,我們可以藉由呼叫它將圖片變成 read-only 的狀態,  一旦圖片的屬性是read-only , 就可以放心的在其他執行緒中使用了  

[WPF]為什麼無法在WINPE裡顯示圖片

當我們使用WPF的image cotrol來顯示圖片時   LoadingImage.Source = new BitmapImage ( new Uri ( "H:\\Images\\img_loading_" + count.ToString() + ".png" )); 如果要將程式跑在WINPE 下 WINPE環境裡必須有以下兩隻DLL - mscms.dll  - windowscodecsExt.dll 若缺少的話, 程式在執行期間拋出以下的錯誤訊息  unable to load DLL mscms.dll  unable to load DLL windowscodecsExt.dll  

如何透過非 UI thread 去存取WPF control

如果把產生資料的邏輯交給UI thread去處理 則有可能會因為處理的資料量太大造成UI hang on的問題 因此我們可以創建另一個thread去幫我們做這件事情 System.Threading. Thread thread = new System.Threading. Thread (() => GenerateDataAndUpdateUI( this )); thread.Start(); 可是在update UI control 時 必須使用 Dispatcher 物件來通知 UI thread 去做更新   GenerateDataAndUpdateUI(){                               //generate data ...                  Dispatcher.BeginInvoke( new Action (() => {                                                          //update UI ...                 })); } 否則可能會遇到以下的runtime exception The calling thread cannot access this object because a different thread owns it

WPF當游標經過目標圖片時自動放大圖片的功能

以 DoubleAnimation 的動畫特效來實現: 當游標經過目標圖片時自動放大圖片的功能 以下面簡單的UI當作範例 < Window   x   : Class ="MouseoverAndScaleUIImage.MainWindow"           xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"           xmlns : x   ="http://schemas.microsoft.com/winfx/2006/xaml"           Title ="MainWindow"   Height   ="350"   Width ="525">       < Grid   >           < Image   Name   ="IconImage"   Source ="icon.jpg"   HorizontalAlignment ="Left"   Height ="100"   Margin ="180,118,0,0"   VerticalAlignment ="Top"   Width   ="100">         </ Window > 實作方法: 一.  首先建立 DoubleAnimation 和 Storyboard 若要將動畫套用在物件上, 須建立  Storyboard,  並使用  TargetName  和  TargetProperty  附加屬性指定要建立動畫的物件和屬性 這邊的動畫效果是指定Height\Width來調整動畫的長寬 Storyboard.TargetProperty ="Height" To ="300"  Storyboard.TargetProper