由於乙個類可以不用顯示的啟動或者管理執行緒而有多執行緒的能力,因此通過這就提供了乙個簡單的手段來實現,基於事件的非同步模式(event-based asynchronous pattern (eap))。
它同時也具有以下特徵
可協調的退出模式。
當工作執行緒完成時,可以安全的更新wpf或者windowform控制項
給完成事件**異常
eap只是乙個模式,所以這些特徵必須由**來實現。只有少許類遵循這個模式,最顯著的就是backgroundwork類和webclient。這模式本質上:乙個類提供一系列的成員,內部管理多執行緒。如下一些一些成員
這些成員是webclite類。
public byte downloaddata (uri address); // synchronous version
public void downloaddataasync (uri address);
public void downloaddataasync (uri address, object usertoken);
public event downloaddatacompletedeventhandler downloaddatacompleted;
public void cancelasync (object userstate); // cancels an operation
public bool isbusy
*async方法非同步執行,也就是該方法在另乙個執行緒上啟動乙個操作,然後立即返回,當該操作完成,*completed事件自動觸發呼叫。這個事件傳遞事件引數object,包含:
乙個標誌位,指示操作是否被取消(通過呼叫cancelasync)
乙個錯誤物件,指示乙個異常如果有的話
usertoken物件,如果非同步呼叫提供的話。
var wc = new webclient();
wc.downloadstringcompleted += (sender, args) =>
}; wc.downloadstringasync (new uri ("")); // start it
task類提供相似的功能,包括異常報出,不間斷執行,取消操作,同步上下文。
基於事件的非同步程式設計模式
public class backgroundworker component 通常的使用方法如下 在dowork中新增乙個事件處理程式,在該事件處理程式中呼叫耗時的操作 呼叫 runworkerasync啟動才操作。如果想要得到當前的更新進度,在progresschanged事件處理程式中處理,如...
基於事件的非同步程式設計模式
public class backgroundworker component 通常的使用方法如下 在dowork中新增乙個事件處理程式,在該事件處理程式中呼叫耗時的操作 呼叫 runworkerasync啟動才操作。如果想要得到當前的更新進度,在progresschanged事件處理程式中處理,如...
基於事件的非同步模式概述
msdn 那些同時執行多項任務 但仍能響應使用者互動的應用程式通常需要實施一種使用多執行緒的設計方案。system.threading 命名空間提供了建立高效能多執行緒應用程式所必需的所有工具,但要想有效地使用這些工具,需要有豐富的使用多執行緒軟體工程的經驗。對於相對簡單的多執行緒應用程式,back...