Invoke()/BeginInvoke()的区别

CSDN解释:

     Control——Invoke->在拥有控件的基础窗口句柄的线程尚执行委托。

     Control——BeginInvoke->在创建控件的基础句柄所在线程尚异步执行委托。

显然,Invoke()与BeginInvoke()方法间的主要区别在于"异步"

也就是说,

    Invoke()调用时,会阻塞当前线程,等到Invoke()方法返回才继续执行后面的代码,表现出"同步"的概念.

    BeginInvoke()调用时,当前线程会启用线程池中的某个线程来执行此方法,当前线程不被阻塞,继续运行后面的代码,表现出"异步"的概念.

    EndInvoke(),在想获取BeginInvoke()执行完毕后的结果时,调用此方法来获取。

控件为何会需要Invoke()或BeginInvoke()方法呢?

    因为控件的这样一个特点:控件的数据(或状态)值只能在创建控件的那个线程上被修改。也就是说如果控件是线程A上创建的,则其他任何线程B都不允许修改控件的值,只可以访问(读取)控件的值只能在线程A上进行更改。

   基于以上原因,而又有这样的需求:控件在线程A上创建,又要在B中更改其值,所以,Invoke()/BeginInvoke()就出现了.使线程B可以间接地更改在线程A中创建的控件的值,真正更改控件值的操作仍然是在线程A的上下文中执行

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值