Invoke 与 BeginInvoke 应用场景

 

1.委托中 Invoke , BeginInvoke 特点

Invoke  : 同步调用 , 委托在当前线程执行

BeginInvoke : 异步调用 , 通常使用线程池资源执行委托。

 

2. UI  控件中包含 Invoke , BeginInvoke 特点

Invoke : 在UI线程执行委托,等待执行完成返回。

BeginInvoke : 异步在 UI 线程执行委托 ,无需等待返回。 通常执行完毕 触发 AsyncCallback , 完成回调。

 

private void button1_Click(object sender, EventArgs e)
        {
            Action<string> action = new Action<string>((s) => {
                System.Threading.Thread.Sleep(5000);
                MessageBox.Show("sleep 5000 ms" + " IsThreadPoolThread:" + System.Threading.Thread.CurrentThread.IsThreadPoolThread + " ID:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
            });

            //委托的同步异步调用
            //BeginInvoke 使用线程池执行委托
           // IAsyncResult result = action.BeginInvoke(null, new AsyncCallback((s) => { MessageBox.Show("执行完毕!" + s.AsyncState + " IsThreadPoolThread:" + System.Threading.Thread.CurrentThread.IsThreadPoolThread); }), "执行完成,回调传入参数!");
           ////result.AsyncWaitHandle.WaitOne();
           // action.EndInvoke(result);
           // result.AsyncWaitHandle.Close();

            ////Invoke 同步调用 , 默认使用当前线程
            action.Invoke("传入参数!");
            System.Threading.Thread.Sleep(1000);
            MessageBox.Show("sleep 1000 ms  ID:" + System.Threading.Thread.CurrentThread.ManagedThreadId);

            
            //UI 控件 Invoke 特点
            //this.InvokeRequired  判断当前线程是否是UI线程
            //this.Invoke(...)  同步在UI线程调用指定方法
            //this.BeginInvoke(...)  异步在UI 线程调用指定方法

     }

 

转载于:https://www.cnblogs.com/a_bu/p/8074437.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值