程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用委托進行異步編程

使用委托進行異步編程

編輯:C#入門知識

異步委托提供以異步方式調用同步方法的能力。當同步調用一個委托時,“Invoke”方法直接對當前線程調用目標方法。如果編譯器支持異步委托,則它將生成“Invoke”方法以及“BeginInvoke”和“EndInvoke”方法。如果調用“BeginInvoke”方法,則公共語言運行庫 (CLR) 將對請求進行排隊並立即返回到調用方。將對來自線程池的線程調用該目標方法。提交請求的原始線程自由地繼續與目標方法並行執行,該目標方法是對線程池線程運行的。如果在對“BeginInvoke”方法的調用中指定了回調方法,則當目標方法返回時將調用該回調方法。在回調方法中,“EndInvoke”方法獲取返回值和所有輸入/輸出參數。如果在調用“BeginInvoke”時未指定任何回調方法,則可以從調用“BeginInvoke”的線程中調用“EndInvoke”。

使用用戶指定的委托簽名,編譯器應發出具有“Invoke”、“BeginInvoke”和“EndInvoke”方法的委托類。“BeginInvoke”和“EndInvoke”方法應被修飾為本機的。因為這些方法被標記為本機的,所以 CLR 在類加載時自動提供該實現。加載程序確保它們未被重寫。

NET Framework 允許您異步調用任何方法。為此,應定義與您要調用的方法具有相同簽名的委托;公共語言運行庫會自動使用適當的簽名為該委托定義 BeginInvoke 和 EndInvoke 方法。

BeginInvoke 方法可啟動異步調用。它與您需要異步執行的方法具有相同的參數,另外它還有兩個可選參數。第一個參數是一個 AsyncCallback 委托,該委托引用在異步調用完成時要調用的方法。第二個參數是一個用戶定義的對象,該對象可向回調方法傳遞信息。BeginInvoke 立即返回,不等待異步調用完成。BeginInvoke 會返回 IAsyncResult,這個結果可用於監視異步調用進度。

EndInvoke 方法檢索異步調用的結果。調用 BeginInvoke 後可隨時調用 EndInvoke 方法;如果異步調用尚未完成,EndInvoke 將一直阻止調用線程,直到異步調用完成後才允許調用線程執行。EndInvoke 的參數包括您需要異步執行的方法的 outref 參數(在 Visual Basic 中為 <Out>ByRef 和 ByRef)以及由 BeginInvoke 返回的 IAsyncResult。

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using System.Threading;
10 using System.Run

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved