首頁 >後端開發 >C#.Net教程 >c#委託的非同步呼叫的圖文程式碼範例

c#委託的非同步呼叫的圖文程式碼範例

黄舟
黄舟原創
2017-03-04 10:17:411651瀏覽

所委託的非同步呼叫

#有時,如果要讓委託去完成一個複雜耗時的任務時,同步呼叫不是一個好的選擇,因為這樣使用者面臨的是無聊的時間消耗和漫長(相對來說##)的等待。這時委託的非同步呼叫就體現出了優勢,關於委託的非同步呼叫C##也做了封裝,透過beginInvoke

#d氣都和endInvke來完成。下面給出一個例子。

1.      定義了一個委託,myDelegate

2.      

##定義了一個事件用於外部訂閱3.      


#Increment,測試欄位

4.      

#####doIt######方法,每次被呼叫時######increment######都會自增,當值為######5### ###時,非同步呼叫事件############ #####################」重點在於這段程式碼:### ###############
IAsyncResult result = this.callBack.BeginInvoke
                        (new AsyncCallback(
                            (ia) => {
                                MessageBox.Show("completed");
                                AsyncResult ar = (AsyncResult)ia;
                                MyDelegate md = ar.AsyncDelegate as MyDelegate;
                                int r = md.EndInvoke(ia);
                                MessageBox.Show(r.ToString() + ia.AsyncState);
                            }), "message");
                    MessageBox.Show("begin invoke");
#########BeginInvoke######函數包含四個參數:############ ######AsyncCallback######物件:這個參數的意思是,告訴它當回呼完成時,下一步該做什麼,因此需要傳遞給它一個方法。 ######new AsyncCallback(######這裡接收一個方法,這裡我用了######lambda######表達式######)### ###。 ##################Object######物件:要傳遞給回調結束時所呼叫方法的參數。 ##########

   #AsyncResult ar = (AsyncResult)ia;#//// #取得傳入的IasyncResult,轉換為AsyncResult物件

##  

 MyDelegate md = ar.AsyncDelegate as MyDelegate;////#獲得#獲得 callBack物件

#  ## 

#int r = md.EndInvoke(ia);

////

結束委託的調用,獲得返回值

##   MessageBox.Show(r.ToString() + ia.AsyncState);////

驗證是否取到了回傳值

OK,現在關於非同步委託已經定義好了,下一步就是呼叫了: 程式碼說明:

New##一個timer和一個asyntroniseDelegate物件。

訂閱callBack事件,方法最後,回傳了一個#1

timer#完成increment 累加的操作,每一秒累加1increment

#累積到######5######的時候, ######callback######事件觸發,此時讓它去執行一個很複雜的任務,循環了######10#####億次。 ##########

運行之後,會看到的提示框,緊接著是,大約過了2-3秒提示框出現,然後是#(可見,非同步呼叫的最後,我們成功的取得了方法的回傳值)

# 以上就是c#委託的非同步呼叫的圖文程式碼範例的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn