回調函數使得程序能在異步操作完成后執行后續處理,可當作執行完成標志。異步編程是建立在委托的基礎上的一種編程方法;異步調用的每個方法都是在獨立的線程中執行的,本質上就是一種多線程程序;異步比較適合在后臺運行較為耗時的簡單任務,并且任務之間相互獨立,不能有直接訪問可視化控件的代碼。IAsyncResult result = objCal.BeginInvoke(9 * i, 1000*i, CallBack, i);這里最后一個參數i給回調函數的字段AsyncState,即i的值就是result.AsyncState。倒數第二個參數CallBack是自己創建的回調函數,即在for循環每次執行完一次后,要執行的內容。namespace _011_異步編程進階
{
* 總結:
* 1.異步編程是建立在委托的基礎上的一種編程方法。
* 2.異步調用的每個方法都是在獨立的線程中執行的。本質上就是一種多線程程序
* 3.比較適合在后臺運行較為耗時的簡單任務,并且任務之間相互獨立,不能有直接訪問可視化控件的代碼。
* 4.如果后臺任務要求必須按照特定順序執行,或者訪問共享資源,則異步不太適合,應選擇多線程。
*/
public partial class 異步編程進階 : Form
{
private delegate int delCal(int num, int ms);
public 異步編程進階()
{
InitializeComponent();
objCal = (num, ms) =>
{
Thread.Sleep(ms);
return num * 2;
};
}
#region 根據委托編寫方法
private int Task1(int num,int ms)
{
System.Threading.Thread.Sleep(ms);
return num * 2;
}
#endregion
private delCal objCal = null;
private void button1_Click(object sender, EventArgs e)
{
for (int i = 1; i < 10; i++)
{
IAsyncResult result = objCal.BeginInvoke(9 * i, 1000*i, CallBack, i);
}
}
private void CallBack(IAsyncResult result)
{
int res=objCal.EndInvoke(result);
Console.WriteLine("第{0}個計算結果為:{1}", result.AsyncState.ToString(),res);
}
}
}
閱讀原文:原文鏈接
該文章在 2025/3/28 11:32:35 編輯過