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 ...
随机推荐
- poj 1088 滑雪(贪心算法)
思想: (贪心算法 ,看到题目是中文才做的) 先对数组中的数据进行排序,从最小的数据计算 当前的顶点的可以滑行的最大值=max(周围可达的顶点的可以滑行的最大值)+1 这样计算最后产生的路径肯定是最大 ...
- 关于在freemarker模板中遍历数据模型List<JavaBean>的经验
本文采用简单的servlet作为后台处理数据的工具,前台使用freemarker的ftl模板作为输出工具,简单说明怎样将封装有实体类对象的List集合注入到ftl模板中并且成功的在遍历显示出来,之前在 ...
- 【JS学习笔记】第一个JS效果——鼠标提示框
分析效果实现原理--鼠标提示框 样式:div的display 事件:onmouseover,onmouseout 编写JS的流程 布局:HTML+CSS 属性:确定需要修改哪些属性 事件:确定用户做哪 ...
- AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖-转
http://blog.csdn.net/zhangh8627/article/details/51752872 AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖 标签: ...
- 本地存储 cookie,session,localstorage( 二)angular-local-storage
原文:https://github.com/grevory/angular-local-storage#api-documentation Get Started (1)Bower: $ bower ...
- NoSQL数据建模技术
原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是 ...
- solr最佳实践
管理页面 页面地址:http://{ip}:{port}/solr/#/ 管理页面的data-import页可以手动重建索引,configuration指定了数据源,重建索引也可以通过http请求触发 ...
- memcache学习和分析
Memcached 特点• 具有非常快的处理速度• 缺乏认证以及安全管制,应将其放置在防火墙之后• 重启后数据全部丢失• 可以给数据设置有效期• 适合使用大量低CPU的机器搭建集群• 各节点之间各自独 ...
- memcahced缓存特点
1.key-value数据结构 2.所有数据保存在内存中 3.可以分布式集群 4.处理并发的机制是libevent事件机制 5.当内容容量达到指定值后,就基于LRU(Least Recently Us ...
- Beego学习笔记——开始
beego简介 beego是一个快速开发Go应用的http框架,他可以用来快速开发API.Web.后端服务等各种应用,是一个RESTFul的框架,主要设计灵感来源于tornado.sinatra.fl ...