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