1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading; 9 using System.Threading.Tasks; 10 using System.Windows.Forms; 11 12 namespace WindowsFormsApplication1 13 { 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 private delegate void SetM(); 21 private delegate void SetZ(int i); 22 private void button1_Click(object sender, EventArgs e) 23 { 24 //Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 25 //SetM s = new SetM(test); 26 //s.BeginInvoke(null, null); 27 //Console.WriteLine("主2" + Thread.CurrentThread.ManagedThreadId); 28 29 //Console.WriteLine("主0" + Thread.CurrentThread.ManagedThreadId); 30 //Action action = new Action(() => { test(); }); 31 //action.BeginInvoke(null, null); 32 //Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 33 34 //Console.WriteLine("主0" + Thread.CurrentThread.ManagedThreadId); 35 //Func<int, int, int> func = new Func<int, int, int>(test1); 36 //// func.BeginInvoke(1, 1, null, null); 37 //func(1, 1); 38 //Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 39 ////Console.WriteLine(func(1, 1)); 40 41 42 43 //等待 44 //Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 45 //SetM s1 = new SetM(test); 46 //var result = s1.BeginInvoke(null, null); 47 //while (!result.IsCompleted) 48 //{ 49 // Thread.Sleep(1000); 50 // } 51 //Console.WriteLine("主2" + Thread.CurrentThread.ManagedThreadId); 52 53 54 //Console.WriteLine("主0" + Thread.CurrentThread.ManagedThreadId); 55 //SetM s1 = new SetM(test); 56 //IAsyncResult ar =s1.BeginInvoke(null, null); 57 //Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 58 //s1.EndInvoke(ar); 59 //Console.WriteLine("主2" + Thread.CurrentThread.ManagedThreadId); 60 61 62 //Console.WriteLine("主0" + Thread.CurrentThread.ManagedThreadId); 63 //Action action = new Action(() => { test(); }); 64 //IAsyncResult ar2 = action.BeginInvoke(null, null); 65 //if (ar2.AsyncWaitHandle.WaitOne()) 66 //{ 67 // Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 68 //} 69 //Console.WriteLine("主2" + Thread.CurrentThread.ManagedThreadId); 70 71 72 //回调 73 74 75 Console.WriteLine("主0" + Thread.CurrentThread.ManagedThreadId); 76 Action a = new Action(() => { test(); }); 77 AsyncCallback callback = o=> { Console.WriteLine("回调" + o.AsyncState); }; 78 a.BeginInvoke(callback, 2); 79 Console.WriteLine("主1" + Thread.CurrentThread.ManagedThreadId); 80 } 81 82 83 private void test() 84 { 85 for (int i = 0; i < 5; i++) 86 { 87 Thread.Sleep(1000); 88 } 89 90 Console.WriteLine("test" + Thread.CurrentThread.ManagedThreadId); 91 } 92 93 private int test1(int a, int b) 94 { 95 for (int i = 0; i < 5; i++) 96 { 97 Thread.Sleep(1000); 98 } 99 100 Console.WriteLine("test1" + Thread.CurrentThread.ManagedThreadId); 101 return 666; 102 } 103 } 104 }