【C#】用委托(Delegate)的BeginInvoke和EndInvoke方法操作線程


讓我們首先了解下什么時候用到C#異步調用:

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

BeginInvoke 方法用於啟動C#異步調用。它與您需要異步執行的方法具有相同的參數,只不過還有兩個額外的參數(將在稍后描述)。BeginInvoke 立即返回,不等待C#異步調用完成。BeginInvoke 返回IasyncResult,可用於監視調用進度。

EndInvoke 方法用於檢索C#異步調用結果。如果C#異步調用未完成,EndInvoke 將一直阻塞到C#異步調用完成。EndInvoke的參數包括您需要異步執行的方法的out 和ref 參數以及由BeginInvoke 返回的IAsyncResult。

Deme如下:

private static int newTask(int ms)
        {
            Console.WriteLine("任務開始");
            Thread.Sleep(ms);
            Random random = new Random();
            int n = random.Next(10000);//返回一個小於10000的隨機數
            Console.WriteLine("任務完成");
            return n;
         
        }

        private delegate int NewTaskDelegate(int ms);
        static void Main(string[] args)
        {
            
            NewTaskDelegate task = newTask;
            IAsyncResult asyncResult = task.BeginInvoke(2000,null,null);
            // EndInvoke方法將被阻塞2秒
            int result = task.EndInvoke(asyncResult);
            Console.WriteLine(result);
            
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM