回調(diào)函數(shù)使得程序能在異步操作完成后執(zhí)行后續(xù)處理,可當(dāng)作執(zhí)行完成標(biāo)志。異步編程是建立在委托的基礎(chǔ)上的一種編程方法;異步調(diào)用的每個方法都是在獨(dú)立的線程中執(zhí)行的,本質(zhì)上就是一種多線程程序;異步比較適合在后臺運(yùn)行較為耗時的簡單任務(wù),并且任務(wù)之間相互獨(dú)立,不能有直接訪問可視化控件的代碼。使用回調(diào)函數(shù)同時執(zhí)行多個任務(wù)。IAsyncResult result = objCal.BeginInvoke(9 * i, 1000*i, CallBack, i);這里最后一個參數(shù)i給回調(diào)函數(shù)的字段AsyncState,即i的值就是result.AsyncState。倒數(shù)第二個參數(shù)CallBack是自己創(chuàng)建的回調(diào)函數(shù),即在for循環(huán)每次執(zhí)行完一次后,要執(zhí)行的內(nèi)容。namespace _011_異步編程進(jìn)階
{
* 總結(jié):
* 1.異步編程是建立在委托的基礎(chǔ)上的一種編程方法。
* 2.異步調(diào)用的每個方法都是在獨(dú)立的線程中執(zhí)行的。本質(zhì)上就是一種多線程程序
* 3.比較適合在后臺運(yùn)行較為耗時的簡單任務(wù),并且任務(wù)之間相互獨(dú)立,不能有直接訪問可視化控件的代碼。
* 4.如果后臺任務(wù)要求必須按照特定順序執(zhí)行,或者訪問共享資源,則異步不太適合,應(yīng)選擇多線程。
*/
public partial class 異步編程進(jìn)階 : Form
{
private delegate int delCal(int num, int ms);
public 異步編程進(jìn)階()
{
InitializeComponent();
objCal = (num, ms) =>
{
Thread.Sleep(ms);
return num * 2;
};
}
#region 根據(jù)委托編寫方法
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}個計算結(jié)果為:{1}", result.AsyncState.ToString(),res);
}
}
}
閱讀原文:原文鏈接
該文章在 2025/3/28 11:32:35 編輯過