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();
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();
MessageBox.Show("sleep 1000 ms ID:" + System.Threading.Thread.CurrentThread.ManagedThreadId); //UI 控件 Invoke 特点
//this.InvokeRequired 判断当前线程是否是UI线程
//this.Invoke(...) 同步在UI线程调用指定方法
//this.BeginInvoke(...) 异步在UI 线程调用指定方法 }
Invoke 与 BeginInvoke 应用场景的更多相关文章
- 转载>>C# Invoke和BeginInvoke区别和使用场景
转载>>C# Invoke和BeginInvoke区别和使用场景 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dotnet程 ...
- WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对
WPF MVVM UI分离之<交互与数据分离> 在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...
- C# Invoke或者BeginInvoke的使用
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是do ...
- C#中Invoke 和 BeginInvoke 的区别
Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托. Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句 ...
- 控件的invoke和beginInvoke方法
System.Windows.Forms.Timer 的timer是在主线程上执行的,因此在timer的tick事件中操作界面上的控件不会发生线程的安全性检测. Control的invoke和begi ...
- C#的Invoke和BeginInvoke
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和Begin ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
今天关闭一个窗体,报出这样的一个错误"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke.",这个不用多想,肯定是那个地方没有释放掉.既然碰到这个问题, ...
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法
以下是错误报告: 标题: SQL Server 安装程序失败. ------------------------------ SQL Server 安装程序遇到以下错误: 在创建窗口句柄之 ...
- invoke和beginInvoke
首先说下,invoke和begininvoke的使用有两种情况: 1. control中的invoke.begininvoke. 2. delegrate中的invoke.begininvoke. 这 ...
随机推荐
- SpringMVC运行原理
一.SpringMVC运行原理图 二.相关接口解释 DispatcherServlet接口: Spring提供的前端控制器,所有的请求都有经过它来统一分发.在DispatcherServlet将请 ...
- [one day one question] Vue单页面应用如何保证F5强刷不清空数据
问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...
- .net core 1.0 中的asp.net identity 基本使用(二)
一.重写(覆盖)身份验证数据类型 1.修改Models目录中的ApplicationUser.cs类文件,如下 namespace xxxx.Models { //将应用程序用户的属性添加到应用程序 ...
- intellij-项目目录隐藏无用的文件和文件夹
File-->Editor-->File Types
- Azure Powershell使用已有特殊化非托管磁盘创建ARM虚拟机
生成已有特殊化非托管磁盘的方法主要有如下两种: 1.使用StorageExplorer存储管理工具,复制特殊化磁盘到一个新的容器下 2.New Portal中删除虚拟机,默认vhd文件会保留在存储账号 ...
- python_6_字符串
什么是字符串? --一般用户输入数据和一堆有意义或者没有意义的文字符号组合 对字符串有哪些操作? --字符串本身不能修改,可以切片,可以读取 -- .capitalize() ...
- CSS--开篇
1,什么是CSS? 层叠样式表(Cascading Style Sheet ),定义了如何显示HTML元素,用来控制网页的样式和布局. 引入CSS后:HTML标记专门用于定义网页的内容,而使用CSS来 ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
- 【nginx】nginx解决跨域详解
使用场景:本地运行一个项目,但是要访问外域的api接口,存在跨域问题,解决方式有很多,但我尝试用nginx解决,搜索了网上文章后再加上尝试终于成功, 其中一些注意事项和大家分享一下. 一.window ...
- LAMP_yum安装
前言,人总是会越来越懒,说真的,我是摸着良心说话的 开始总是喜欢源码安装,因为可以定制,而且能显得有格调(逼格),但是一安装就要半天,还有各种依赖包的安装,各种报错,不忍直视 下面是我摘自晚上的一篇l ...