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 }