委托笔记

action.BeginInvoke

   public class Program
    {
		static void Main(string[] args)
		{
			Console.WriteLine($"********************* 系统开始 线程ID:{Thread.CurrentThread.ManagedThreadId.ToString("00")}  {DateTime.Now.ToString("yyyy-MM-dd HH: mm:ss.fff")} ***************");
			//Action 为框架内置委托
			Action<string> action = Calculate;

			//回调委托:异步线程结束后执行
			AsyncCallback callback = call =>
			{
				Console.WriteLine($"*************** 异步执行状态: {call.IsCompleted} ***************");
				Console.WriteLine($"*************** 自定义对象:{call.AsyncState.ToString()} ***************");
				Console.WriteLine($"********************* 回调函数 线程ID:{Thread.CurrentThread.ManagedThreadId.ToString("00")}  {DateTime.Now.ToString("yyyy-MM-dd HH: mm:ss.fff")} ***************");
			};

			//自定义对象
			var MyObject = new
			{
				Description = "今天我们来使用下BeginInovke&EndInvoke实现异步线程",
				Date = DateTime.Now,
				ByPeople = "WML"
			};
			IAsyncResult iAsyncResult = action.BeginInvoke("Test", callback, MyObject);
			

			//直接等待异步完成,第一时间进入下一行
			//iAsyncResult.AsyncWaitHandle.WaitOne();
			//一直等待
			//iAsyncResult.AsyncWaitHandle.WaitOne(-1);
			//最多等待1000ms
			//iAsyncResult.AsyncWaitHandle.WaitOne(1000);
			//等待
			action.EndInvoke(iAsyncResult);


			Console.WriteLine($"********************* 系统结束 线程ID:{Thread.CurrentThread.ManagedThreadId.ToString("00")}  {DateTime.Now.ToString("yyyy-MM-dd HH: mm:ss.fff")} ***************");
			Console.ReadKey();
		}

		//异步调用方法
		static void Calculate(string name)
		{
			Console.WriteLine($"*********************异步线程-{name}开始 线程ID:{Thread.CurrentThread.ManagedThreadId.ToString("00")}  {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}***************");
			long num = 0;
			for (int i = 0; i < 10000000; i++)
			{
				num += i;
			}
			//等待2s
			Thread.Sleep(2000);
			Console.WriteLine($"*********************异步线程-{name}结束 线程ID:{Thread.CurrentThread.ManagedThreadId.ToString("00")}  {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}***************");
		}

	}

Action

  Action action = () =>
            {
                Invoke((Action)delegate { biMapNavigation_Click(this.biMapNavigation, new EventArgs()); });
            };
            action.BeginInvoke(ar =>
            {
                action.EndInvoke(ar);
                if (ar.IsCompleted)
                {
                    PublicDelegate.LocationVehicle?.Invoke(null, new VehicleEventArgs(new Vehicle() { DeviceID = obj, Name = vn }));
                }
            }, action);

InvokeRequired

//托管调用或者跨线程调用
  if (InvokeRequired)
 {
     Action action = () => pictureBox1.Image = this.imageList1.Images[0];
     Invoke(action);
  }

匿名委托

ConsumerClient.Instance.Consumer.Connected += delegate
                {
                    Invoke(new MethodInvoker(() =>
                    {
                        labNetwork.Text = @"服务已连接";
                        labNetwork.ForeColor = Color.Green;
                    }));
                };
posted @ 2022-07-26 20:46  码农阿亮  阅读(40)  评论(0编辑  收藏  举报