C#中Invoke,BeginInvoke的作用

  • Control.Invoke 和 Control.BeginInvoke

实例1.利用 控件中的Invoke 和 BeginInvoke 方法

作用1:在线程中执行访问和修改UI内容

作用2:Invoke可以阻塞线程,等待UI操作返回

作用3:BeginInvoke不阻塞线程,后台刷新UI,提高程序的流畅性

public partial class fmMain : Form
{public fmMain (){InitializeComponent();}public void ThreadRun(){while (true){Thread.Sleep(1);this.Invoke(new Action(() => { MessageBox.Show("show");// 在该this(Form)控件的线程中执行Action中的委托// 你可以在此获取UI变量 或者 改变UI变量// 但是 ThreadRun线程会被阻塞 等待 Action 执行完成}));this.BeginInvoke(new Action(() =>{MessageBox.Show("show");// 在该this(Form)控件的线程中执行Action中的委托// 你可以在此获取UI变量 或者 改变UI变量// 但是 ThreadRun线程不会被阻塞继续向下执行}));}}
}
  • Action 等delegate 中Invoke和BeginInvoke的作用

实例2.

作用1.Invoke在当前函数中立即执行,相当于直接调用该Action所注册的所有函数,阻塞当前函数帧

作用2.BeginInvoke在当前函数帧中开辟这个线程去执行Action所注册的函数,不阻塞当前函数帧

作用3.BeginInvoke 中有2额外两个参数 (arg1 回调委托,任意参数)用于beginInvoke完成后,执行该某些动作,

注意 结束完回调的函数 所在线程  为调用beginInvoke 的线程

      public Action<string> ShowMsg;public void Test(){// 在当前函数所在线程中执行,当前函数线程阻塞ShowMsg += (str) => { Debug.WriteLine(str); };ShowMsg.Invoke("hello wrold");// 开辟一个线程执行 hello wrold,当前函数线程不阻塞ShowMsg.BeginInvoke("hello wrold", null, null);// AsyncCallback 回调委托// IAsyncResult 异步执行的结果,可以自我继承,添加自定义参数 用于显示异步执行的状态// index(object类型) 外部传参,存储在IAsyncResult.AsyncState中AsyncCallback asyncCallback = ar => { Debug.WriteLine($"beginInvoke 执行完成 回调{ ar.AsyncState}"); };int index = 0;ShowMsg.BeginInvoke("hello wrold", asyncCallback, index);}

C#中Invoke,BeginInvoke的作用相关推荐

  1. .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类...

    .Net基础--程序集与CIL 1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll则需 ...

  2. C#中invoke和beginInvoke

    C#中invoke和beginInvoke invoke的含义是:在拥有此控件的基础窗口句柄的现呈上同步执行指定的委托(同步) beginInvoke的含义是:在创建控件的基础句柄所在线程上异步执行的 ...

  3. 大马哈鱼的C#学习笔记(3):Invoke/BeginInvoke/DynamicInvoke

    Control.Invoke和Control.BeginInvoke Control.Invoke()是同步方法,它会往Control所处的线程(UI主线程)消息队列中加一条消息,请求执行某个委托,在 ...

  4. Invoke()/BeginInvoke()区别

    查看MSDN如下: Control..::.Invoke          ---> 在拥有此控件的基础窗口句柄的线程上执行委托. Control..::.BeginInvoke  ---> ...

  5. C#中Invoke的用法(转)

    转载▼ 转自:http://blog.3snews.net/html/30/34530-27563.html 在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是 ...

  6. 【转】C#中Invoke的用法

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...

  7. Spring中@AliasFor注解的作用及原理

    本文基于Springboot 2.1.6.RELEASE 版本分析. 关于@AliasFor注解,曾提过的一个issue Explicit attribute overrides configured ...

  8. C# Invoke,begininvoke的用法详解

    一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和begininvoke的使用有两种情况: cont ...

  9. C#中Invoke的用法()

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

最新文章

  1. 2018-3-19李宏毅机器学习视频学习笔记九----Classification: Probabilistic Generative Model
  2. eureka自我保护时间_Spring Cloud Eureka 自我保护机制
  3. Unexpected end of JSON input while parsing near
  4. 测开之路二十:比较v1和v2
  5. 毕业设计(论文)-c++小型ftp服务器系统【毕业论文】.doc,毕业设计(论文)-C++小型FTP服务器系统.doc...
  6. .NET Core开发的iNeuOS工业互联网平台,发布 iNeuDA 数据分析展示组件,快捷开发图形报表和数据大屏...
  7. SpringBoot 自带工具类~FileCopyUtils
  8. python集合去重_python集合去重
  9. 使用PostgREST的RestAPI操作之相关软件生态系统
  10. k8s核心技术-Pod(健康检查)_健康检查的方式_以及pod崩溃后如何处理---K8S_Google工作笔记0023
  11. JavaScript数据结构——字典(Dictionary)
  12. power bi指标呈现_在Power BI中使用关键绩效指标
  13. 中孚计算机保密 卸载,智华计算机终端保密检查系统怎样卸载
  14. 微型计算机原理与接口技术AD实验报告,微机原理与接口技术AD转换综合实验报告.doc...
  15. 2.flashFXP破解
  16. 厉害了,10行代码实现抽奖助手自动参与抽奖
  17. 计算机丢失msvc80.dll,msvcr80.dll丢失如何解决-msvcr80.dll丢失的解决方法
  18. 腾讯互娱技术总监张正:《天涯明月刀》后台技术创新
  19. 【FFmpeg视频播放器开发】解封装解码流程、常用API和结构体简介(一)
  20. 嵌入式软考备考_8 软件测试

热门文章

  1. 易语言制作计算机按键指令,关于易语言编写计算器的问题(完整代码!!!!!!!)
  2. 【Windows】U 盘装系统,无法格式化所选磁盘分区[错误: 0x8004242d]
  3. 计算机科学与技术专业实践范文,计算机科学与技术专业毕业实习报告范文.docx...
  4. 什么是短效IP和长效IP?
  5. 2020面试自动化测试面试题【含答案】
  6. 老男孩javascript实战源码
  7. linux命令:Linux命令大全
  8. sdut-循环-7-统计正数和负数的个数(II)python
  9. 表白代码制作(附源码)
  10. 逆讯图驴企业版,这一次颜值更高