但凡涉及到圖形介面,往往的設計都是不支援或者不推薦使用多個執行緒操作介面內容.而且通常會有乙個專門的執行緒排程器來處理任務執行緒和介面執行緒的問題.下面提供兩個兩個方案.
這個方法簡單暴力適合小工作量的修改一些介面內容.使用dispatcher.begininvoke()會將**安排為排程程式的乙個任務.
步驟使用thread新建並開始乙個執行緒
在新建的執行緒處理函式中需要修改介面的時候獲取介面的dispatcher
使用dispatcher的begininvoke方法指定乙個執行緒優先順序,和乙個委託,這個委託時用於修改介面內容的
下面給出一部分**
//新建執行緒下面是新執行緒中的方法thread thread = new thread(updatetextright);
thread.start();
//這個事例剛好是先窗體類中定義的,所以獲取dispatcher變得比較方便,而且使用了匿名委託.在通常的**中會把委託給分離出去比較好.private void updatetextright()
);}
這個類是專門用於簡化windows form程式與執行緒相關的問題設計的,同樣適用於wpf程式.適合於乙個長期的後台程序,支援進度通知,取消支援,完成通知等功能.
使用方法也很簡單,建立乙個backfruopworker例項,它有幾個事件.
dowork事件會在另外乙個執行緒中執行,用runworkerasync()啟動.所以在這個事件中不要去處理修改介面的事情
runworkercompleted事件,在dowork事件返回時(正常或者異常返回),在圖形的執行緒中執行,所以可以修改介面
progresschanged事件,使用reportprogress()方法呼叫,同時是在圖形介面的執行緒中執行,通常負責修改一下進度條什麼的.而reportprogress()方法,通常會在dowork的事件中呼叫,然後給乙個百分比的值.要使用這個功能,需要把workerreportsprogress屬性設定成true
另外值得一說的是,要取消支援需要把workersupportscancellation屬性設為true,使用cancelasync()方法呼叫,但是這個呼叫不會終止程序,所以在dowork事件中需要判斷cancellationpending.
下面給出部分**
建立backgroundworker例項
backgroundworker backgroundworker;開始執行doworkbackgroundworker = new backgroundworker();
backgroundworker.dowork += backgroundworker_dowork;
backgroundworker.runworkercompleted += backgroundworker_runworkercompleted;
//可以返回工作進度
backgroundworker.workerreportsprogress = true;
backgroundworker.progresschanged += backgroundworker_progresschanged;
//允許取消
backgroundworker.workersupportscancellation = true;
backgroundworker.runworkerasync();dowork事件範例,這個方法的內容是在另外乙個執行緒,非同步執行得
private void backgroundworker_dowork(object sender, doworkeventargs e)進度改變時的處理事件,也就是修改一下進度條什麼的//這裡可以使用e.result給乙個返回值,如果有需要的話
}
private void backgroundworker_progresschanged(object sender, progresschangedeventargs e)完成事件我就不演示,下面是取消任務的方法
private void cmdcancel_click(object sender, routedeventargs e)
執行緒在WPF中的使用
專案中可能會有這樣的需求,一直獲取新的某個資料資訊,但仍不影響其他的操作功能,這時就用到了執行緒,獲取新資料放到執行緒中操作,對其他操作不產生影響,下面就以隨機獲取陣列中項為例解說wpf中使用執行緒這一例項 在wpf窗體程式中拖三個button 兩個操作按鈕,乙個啟動按鈕。後台 public del...
WPF中Style的使用
styel在英文中解釋為 樣式 在web開發中,css為層疊樣式表,自從.net3.0推出wpf以來,wpf也有樣式一說,通過設定樣式,使其wpf控制項外觀更加美化同時減少了大量的複雜屬性的設定。在此我們就不討論第一種方式設定控制項的外觀了,因為這不涉及到style的使用。那麼後三種設定樣式來控制控...
WPF中TreeView的使用
不管是在窗體程式開發還是在web應用程式開發中,大家都知道樹這個控制項,並且都稱為treeview,這個控制項將內容分層展示,使其更加形象和直觀!同時呢,treeview在很多專案中都有運用,甚至某些公司做自定義的屬性控制項,當然了,我在此就和大家一起分享一下wpf中系統預設的treeview控制項...