委托小练习

  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 }
原文地址:https://www.cnblogs.com/anyihen/p/12828486.html