標籤:style color 使用 資料 art io
在有時候,我們要從一些外裝置或是網路索取大量資料時,外裝置可能須要處理非常久才幹把傳輸資料回電腦,這時我們僅僅有傻傻的等待。
但我們採用非同步方法呼叫就不同了,我們能夠利用這點時間去做別的事,等待完畢後,再通知我們接收。
1.怎樣進行非同步呼叫
(1)定義要運行非同步方法。
(2)定義一個與運行非同步方法呼叫同樣簽名的託付。
(3)執行個體化該託付,該託付應該指向該非同步方法呼叫。
(4)利用BeginInvoke啟動非同步方法呼叫。
(5)利用EndInvoke得到結果。
(6)設定回調方法。(非必需)
2.BeginInvoke和EndInvoke方法的使用:
我們都知道當程式定義一個託付時,公用語言執行庫將自己主動為該託付定義具有簽名的BegInvoke和EndInvoke 方法
(1)BeginInvoke
BeginInvoke 方法用於啟動非同步呼叫。它與你須要非同步啟動並執行方法具有同樣的參數,另外還有兩個額外的參數。
BeginInvoke 表示馬上返回,不等待非同步呼叫的完畢。
BeginInvoke 返回一個IAsyncResult,可用於監視非同步進度。
(2)EndInvoke
EndInvoke 方法用於檢索非同步呼叫結果。調用BeginInvoke後可隨時調用EndInvoke方法;假設非同步呼叫未完畢,EndInvoke 將一直堵塞。
非同步呼叫完畢。EndInvoke的參數包含您須要非同步啟動並執行方法的out和ref參數(在 Visual Basic 中為 <Out> ByRef 和 ByRef)以及由BeginInvoke 返回的IAsyncResult。
3.示範範例:
namespace ConsoleApplication
{
//定義代理
delegate String Mydelegate();
class temp
{
static void Main(String[] args)
{
//執行個體化代理
Mydelegate Md = new Mydelegate(AsyncMethod);
//執行個體一個回調代理
AsyncCallback callback = new AsyncCallback(callbackMethod);
//開始運行非同步方法呼叫
Md.BeginInvoke(callback, Md);
Console.ReadLine();
}
//非同步呼叫的方法
static String AsyncMethod()
{
Console.WriteLine("非同步方法呼叫正運行");
String str = "非同步呼叫已結束";
return str;
}
//回調方法
static void callbackMethod(IAsyncResult Ias)
{
Mydelegate Md = (Mydelegate)Ias.AsyncState;
String str = Md.EndInvoke(Ias);
Console.WriteLine(str);
}
}
}