IAsyncResult 接口异步 和匿名委托
private void Form1_Load(object sender, EventArgs e)
{
///控件属性来处理
Control.CheckForIllegalCrossThreadCalls = false;
}
DataSet ds = new DataSet();
Mydelegate del = new Mydelegate(LoadData);
IAsyncResult result = del.BeginInvoke(null, null);
ds = del.EndInvoke(result);
gridControl1.DataSource = ds.Tables[0];
this.Invoke((EventHandler)delegate
{
labMessage.Text = "数据填充中......";
});
/// <summary>
/// Invoke 修改主线程控件的属性
/// </summary>
/// <param name="strMsg"></param>
delegate void SafeSetText(string strMsg);
private void SetText(string strMsg)
{
if (textBox1.InvokeRequired)
{
SafeSetText objSet = new SafeSetText(SetText);
textBox1.Invoke(objSet, new object[] { strMsg });
}
else
{
textBox1.Text = strMsg;
}
}
/// <summary>
/// 匿名委托
/// </summary>
/// <param name="strMsg"></param>
delegate void SafeSetText(string strMsg);
private void SetText2(string strMsg)
{
SafeSetText objSet = delegate(string str)
{
textBox1.Text = str;
};
textBox1.Invoke(objSet, new object[] { strMsg });
}
///3.0及以后的版本中有了Lamda表达式
this.Invoke(new Action(() =>
{
textBox1.Text = "关闭";
}));
Thread invokeThread;
private void button1_Click(object sender, EventArgs e)
{
////执行输出顺序:AAA CCC EEE BBB DDD
string DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "AAA" + " " + DataTime);
invokeThread = new Thread(new ThreadStart(StartMethod));
invokeThread.Start();
string a = string.Empty;
for (int i = 0; i < 3; i++) //调整循环次数,看的会更清楚
{
//Thread.Sleep(1000);
a = a + "B";
}
string DataTime2= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + a + " " + DataTime2);
}
private void StartMethod()
{
string DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "CCC" + " " + DataTime);
button1.Invoke(new Action(invokeMethod),new Object[]{});
string DataTime2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "DDD" + " " + DataTime2);
}
private void invokeMethod()
{
//Thread.Sleep(3000);
string DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "EEE" + " " + DataTime);
}
Thread begingInvoke;
private void button2_Click(object sender, EventArgs e)
{
string DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "AAA" + " " + DataTime);
begingInvoke = new Thread(new ThreadStart(begingInvokeStartMethod));
begingInvoke.Start();
string a = string.Empty;
for (int i = 0; i < 3; i++) //调整循环次数,看的会更清楚
{
//Thread.Sleep(1000);
a = a + "B";
}
string DataTime2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + a + " " + DataTime2);
}
private void begingInvokeStartMethod()
{
string DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "CCC" + " " + DataTime);
button1.BeginInvoke(new Action(begingInvokeMethod),new Object[]{});
string DataTime2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "DDD" + " " + DataTime2);
}
private void begingInvokeMethod()
{
string DataTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff");
MessageBox.Show(Thread.CurrentThread.GetHashCode().ToString() + "EEE" + " " + DataTime);
}
IAsyncResult 接口异步 和匿名委托的更多相关文章
- 异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
http://www.cnblogs.com/panjun-Donet/archive/2009/03/03/1284700.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前需要 ...
- IAsyncResult 接口
IAsyncResult 接口由包含可异步操作的方法的类实现.它是启动异步操作的方法的返回类型,如 FileStream.BeginRead,也是结束异步操作的方法的第三个参数的类型,如 FileSt ...
- C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式
三.基于 IAsyncResult 的异步设计模式(设计层面) IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来 ...
- Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件
一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...
- C# 多线程系列之异步回调(委托)
本文参考自C#基础:线程之异步回调(委托),纯属读书笔记 在解析异步回调之前,先看同步回调的执行过程,以及代码原理. 1.线程的同步执行 同步执行:在主线程执行的时候,主线程调用一个其它方法,此时主线 ...
- 帮助理解委托、匿名委托、Lambda表达式还有事件
写了一个小程序,能够很好的认识到这三个的用法 namespace Lambda { /// <summary> /// 实现根据指定运算形式 输出结果 /// </summary&g ...
- 委托、匿名委托、Lambda 表达式、Expression表达式树之刨根问底
本篇不是对标题所述之概念的入门文章,重点在阐述它们的异同点和应用场景.各位看官,这里就不啰嗦了,直接上代码. 首先定义一个泛型委托类型,如下: public delegate T Function&l ...
- 使用匿名委托,Lambda简化多线程代码
使用匿名委托,Lambda简化多线程代码 .net中的线程也接触不少了.在多线程中最常见的应用莫过于有一个耗时的操作需要放到线程中去操作,而在这个线程中我们需要更新UI,这个时候就要创建一个委托了 ...
- 委托、匿名委托和lambda表达式
1.委托 在.NET中,委托有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差为例,先声明一个成员方法: public int CompareTwoV ...
随机推荐
- 从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结
一.四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象.静态全局对象 全局对象的构造先于main函数 已初始化 ...
- C++11多线程std::thread的简单使用
在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有 ...
- 【转】UWP 捕获全局异常
转自:http://www.cnblogs.com/youngytj/p/4749004.html 异步(async)方法中的异常无法被App的UnhandledException捕获的问题 这是一个 ...
- bzoj2301: [HAOI2011]Problem b懵逼乌斯反演
属于结果的和好求但是结果不好求的题 (轻易能得到以k的倍数为最大公约数的对数,但是不好直接求k) 所以一波反演结束 其实反演的时候完全没有反演的感觉,就是不停地恒等变形 算是懵逼乌斯反演最简单的例题 ...
- 【Backbone】 Backbone初探
前言 在此之前研究了一段React,但是不得不承认React.Vue等MVVM框架相对于原有的Jquery来说,简直是翻天覆地的不同.它们之间的差异不仅仅体现在框架思维的不同,而是ES5到ES6的编程 ...
- [pinyin4j] java版汉字转换拼音(大小写)
pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2. ...
- 第一百三十三节,JavaScript,封装库--弹出登录框
JavaScript,封装库--弹出登录框 封装库,增加了两个方法 yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,chuang_kou_shi_jian()方法,浏览器窗口事 ...
- TypeScript 学习二 表达式和循环
表达式: 1,箭头表达式:将function用箭头代替,参数相应进行处理: 用来声明匿名函数,消除了传统匿名函数的this指针问题: 1) 例:简单的方法体为单行的方法,此时不需要大括号和return ...
- 实现自己的JDBC框架
使用JDBC操作数据库时,dao层的增删改查有很多重复的代码,比如下面的 public int getTotal() { Connection conn = null;//通用代码 PreparedS ...
- B+树概念学习
转载自 从B树.B+树.B*树谈到R 树 1.用阶定义的B树 B 树又叫平衡多路查找树.一棵m阶的B 树 (注:切勿简单的认为一棵m阶的B树是m叉树,虽然存在四叉树,八叉树,KD树,及vp/R树/R* ...