1、創建線程的一種簡單方法是定義一個委托,並非同步調用它。 增加代碼中第17行的Sleep方法的參數值,輸出的星號的個數會減少,反之會增加。 運行結果: 2、IAsyncResult有一個名字叫AsyncWaitHandle的屬性,該屬性的類型是WaitHandle類。該類的WaitOne方法會“將一 ...
1、創建線程的一種簡單方法是定義一個委托,並非同步調用它。
1 using System; 2 using System.Threading; 3 4 delegate int WaitAWhileDelegate(int data, int ms); 5 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 WaitAWhileDelegate d = WaitAWhile; 11 int data = 1; 12 int ms = 3000; 13 IAsyncResult a = d.BeginInvoke(data, ms, null, null); 14 while (!a.IsCompleted) 15 { 16 Console.Write("*"); 17 Thread.Sleep(100); 18 } 19 int result = d.EndInvoke(a); 20 Console.WriteLine("\nresult: {0}", result); 21 } 22 23 static int WaitAWhile(int data, int ms) 24 { 25 Console.WriteLine("WaitAWhile started."); 26 Thread.Sleep(ms); 27 Console.WriteLine("WaitAWhile completed."); 28 return ++data; 29 } 30 }
增加代碼中第17行的Sleep方法的參數值,輸出的星號的個數會減少,反之會增加。
運行結果:
2、IAsyncResult有一個名字叫AsyncWaitHandle的屬性,該屬性的類型是WaitHandle類。該類的WaitOne方法會“將一個超時時間作為可選的第一個參數,在其中可以定義要等待的最長時間”。
1 using System; 2 using System.Threading; 3 4 class Program 5 { 6 delegate int WaitAWhileDelegate(int data, int ms); 7 8 static void Main(string[] args) 9 { 10 WaitAWhileDelegate d = new WaitAWhileDelegate(WaitAWhile); 11 int data = 1; 12 int ms = 3000; 13 IAsyncResult a = d.BeginInvoke(data, ms, null, null); 14 while (true) 15 { 16 Console.Write("*"); 17 if (a.AsyncWaitHandle.WaitOne(50, false)) 18 { 19 Console.WriteLine("Can get the result now."); 20 break; 21 } 22 } 23 int result = d.EndInvoke(a); 24 Console.WriteLine("\nresult: {0}", result); 25 } 26 27 static int WaitAWhile(int data, int ms) 28 { 29 Console.WriteLine("WaitAWhile started."); 30 Thread.Sleep(ms); 31 Console.WriteLine("WaitAWhile completed."); 32 return ++data; 33 } 34 }
運行結果: