Invoke 與 BeginInvoke 在主副線程中的執行順序和區別

栏目: ASP.NET · 发布时间: 8年前

内容简介:Invoke 與 BeginInvoke 在主副線程中的執行順序和區別

在寫多執行緒時必須更新UI狀態時查到的資料,做個紀錄一下。

據msdn中介紹,它們最大的區別就是BeginInvoke屬於異步執行的。

  • Control.Invoke 方法 (Delegate)
    在擁有此控件的基礎窗口句柄的線程上執行指定的委託。
  • Control.BeginInvoke 方法 (Delegate)
    在創建控件的基礎句柄所在線程上異步執行指定委託。

總結:

以下為了方便理解,假設如下:

  1. 主線程表示Control.Invoke或Control.BeginInvoke中Control所在的線程,即創建該創建的線程。 (一般為UI線程)
  2. 支線程表示不同於主線程的調用Invoke或BeginInvoke的線程。
  3. Control的Invoke和BeginInvoke的委託方法是在主線程,即UI線程上執行。 (也就是說如果你的委託方法用來取花費時間長的數據,然後更新界面什麼的,千萬別在主線程上調用Control.Invoke和Control.BeginInvoke,因為這些是依然阻塞UI線程的,造成界面的假死)
  4. Invoke會阻塞主支線程,BeginInvoke只會阻塞主線程,不會阻塞支線程!因此BeginInvoke的異步執行是指相對於支線程異步,而不是相對於主線程異步。 (從最後一個例子就能看出,程序運行點擊button1)

轉載: 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript实战

JavaScript实战

Frank W. Zammetti / 张皛珏 / 人民邮电出版社 / 2009-8 / 59.00元

随着Ajax的兴起,JavaScript迅速地从改进网站的配角晋升为开发专业级高质量应用的主角,成为了Web开发中不可缺少的一员。 本书主要通过10个具体项目,包括构建可扩展的JavaScript库、使用GUI窗口小部件框架、开发支持拖放的购物车和编写JavaScript游戏等,讲述JavaScript最佳实践、Ajax技术,以及一些流行的JavaScript库,如Rico、Dojo、scr......一起来看看 《JavaScript实战》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具