以前學的ASP.NET,調用的都是同步方法,同步方法的好處就是,一步一步走,完成這步才會走下一步。然而,WCF使用的都是異步方法,調用之後不管有沒有獲得結果就直接往下走,最可惡的是異步函數都是Void類型,得不到傳回結果,雖然有Completed的事件處理,但是還是感覺比較束縛,無法與前端互動。
這裡就跟大家分享一種傳入回調函數的方法,把前台的方法寫好,傳到背景,讓異步方法調用完成時執行。廢話不多說了,開始寫代碼:
首先,要先建一個帶網站的sliverlight項目,這裡就不細說了,在網站中添加一個Silverlight-enabled Wcf Service,随便寫一個方法,就用自動生成的Dowork方法吧,下面是代碼:
方法很簡單,就是傳回一個字元串,下面在Sliverlight中添加服務引用,引用剛才建立的服務,然後寫一個測試方法,代碼如下:
這個方法調用了WCF服務的方法,并綁定了Completed的事件,這裡需要注意的是,我們的WCF中的DoWork方法并沒有任何參數,這裡卻傳入了一個Action<T>委托,沒錯,這個就是回調函數,DoWorkAsync() 系統預設有個重載方法DoWorkAsync(object userState),有個參數為object userState,是以可以對這個參數指派,把我們的回調函數傳進去,下面是回調函數的調用:
這裡是最精簡的寫法,當然可以自己擴充,添加錯誤處理等,使其功能變的更加強大,但這裡主要就是使用了userState參數,傳入了回調函數,進而執行的。
這裡回調函數,我們傳入lambda表達式,至此,回調函數就完成了。
在開發中,自己可以根據需要完善方法。