zoukankan      html  css  js  c++  java
  • C# 中的invoke和begininvoke

    原文地址:http://www.cnblogs.com/Z-King/archive/2011/11/03/2234337.html


      1. control中的invoke、begininvoke。

      2. delegrate中的invoke、begininvoke。 (这是什么??)

      这两种情况是不同的,我们这里要讲的是第1种。下面我们在来说下.NET中对invoke和begininvoke的官方定义。

      control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。

      control.begininvoke(参数delegate)方法:在创建控件的基础句柄所在线程上异步执行指定委托。

      根据这两个概念我们大致理解invoke表是同步、begininvoke表示异步。但是如何来进行同步和异步呢


    其实invoke和begininvoke所提交的委托方法都是在主线程中执行的,其实根据我invoke和begininvoke的定义我们要在子线程中来看这个问题,在invoke例子中我们会发现invoke所提交的委托方法执行完成后,才能继续执行DDD;在begininvoke例子中我们会发现begininvoke所提交的委托方法后,子线程讲继续执行DDD,不需要等待委托方法的完成。 那么现在我们在回想下invoke(同步)和begininvoke(异步)的概念,其实它们所说的意思是相对于子线程而言的,其实对于控件的调用总是由主线程来执行的。我们很多人搞不清这个同步和异步,主要还是因为我们把参照物选错了。其实有时候光看概念是很容易理解错误的。


    WPF中则是UI控件会有一个dispatcher对象,可以使用this.dispatcher.invoke或者this.dispatcher.Begininvoke,  和上面同理,前者为同步,后者为异步。

  • 相关阅读:
    【BIEE】清除缓存
    【BIEE】安装好BIEE后,修改默认登录页面不为QuickStart页面
    【BIRT】修改BIRT的背景颜色
    【Oracle】查看死锁与解除死锁
    【Oracle】查看正在运行的存储过程
    【Oracle】表空间相关集合
    【Oracle】Oracle常用语句集合
    MapWindowPoints
    模拟鼠标操作
    SVN MERGE 方法(原创)
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163540.html
Copyright © 2011-2022 走看看