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 接口异步 和匿名委托的更多相关文章

  1. 异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)

    http://www.cnblogs.com/panjun-Donet/archive/2009/03/03/1284700.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前需要 ...

  2. IAsyncResult 接口

    IAsyncResult 接口由包含可异步操作的方法的类实现.它是启动异步操作的方法的返回类型,如 FileStream.BeginRead,也是结束异步操作的方法的第三个参数的类型,如 FileSt ...

  3. C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式

    三.基于 IAsyncResult 的异步设计模式(设计层面) IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来 ...

  4. Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件

    一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...

  5. C# 多线程系列之异步回调(委托)

    本文参考自C#基础:线程之异步回调(委托),纯属读书笔记 在解析异步回调之前,先看同步回调的执行过程,以及代码原理. 1.线程的同步执行 同步执行:在主线程执行的时候,主线程调用一个其它方法,此时主线 ...

  6. 帮助理解委托、匿名委托、Lambda表达式还有事件

    写了一个小程序,能够很好的认识到这三个的用法 namespace Lambda { /// <summary> /// 实现根据指定运算形式 输出结果 /// </summary&g ...

  7. 委托、匿名委托、Lambda 表达式、Expression表达式树之刨根问底

    本篇不是对标题所述之概念的入门文章,重点在阐述它们的异同点和应用场景.各位看官,这里就不啰嗦了,直接上代码. 首先定义一个泛型委托类型,如下: public delegate T Function&l ...

  8. 使用匿名委托,Lambda简化多线程代码

    使用匿名委托,Lambda简化多线程代码   .net中的线程也接触不少了.在多线程中最常见的应用莫过于有一个耗时的操作需要放到线程中去操作,而在这个线程中我们需要更新UI,这个时候就要创建一个委托了 ...

  9. 委托、匿名委托和lambda表达式

    1.委托 在.NET中,委托有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差为例,先声明一个成员方法: public int CompareTwoV ...

随机推荐

  1. 给你的git仓库瘦身

    很久没有写博客了,最近遇到了一个git问题,比较典型,记录下来与大家分享. 我们使用git版本控制的时候享受了很多便利,不管是代码合并,分支提供给我们的并发,但我们也往往忽略了每次提交之后在我们本地项 ...

  2. bzoj 1430: 小猴打架 -- prufer编码

    1430: 小猴打架 Time Limit: 5 Sec  Memory Limit: 162 MB Description 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是 ...

  3. MySQL索引方法

    MySQL目前主要有以下几种索引方法:B-Tree,Hash,R-Tree. 一.B-Tree B-Tree是最常见的索引类型,所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等.所以B-T ...

  4. Linux教学辅助训练(第二阶段)

    linux教学辅助训练(第二阶段) 标签(空格分隔):Linux辅助训练 ---更多资料点我查看 提示:本阶段性练习题是对<实战教学笔记>相应章节知识的归纳与扩展部分,必须要会,是面试前必 ...

  5. virtualbox 中的linux 共享文件

    首先要安装VirtualBox的增强版功能(VBoxGuestAdditions) 在 设备--->安装增强版功能----->运行,重启电脑. 出现这个问题,看看安装增强功能的时候,有没有 ...

  6. sharepoint 2010版本 图文安装

    软件程序:Microsoft Perject Server2010 Microsoft Share Point2010(中文版) 操作系统:windows server 2008 sp1  64位 数 ...

  7. Python学习--09 模块

    模块让我们能够有逻辑地组织Python代码段.把相关的代码分配到一个 模块里能让我们的代码更好用,更易懂. 导入模块 Python使用import语句导入模块.语法: # 形式一:导入模块 impor ...

  8. CART分类与回归树与GBDT(Gradient Boost Decision Tree)

    一.CART分类与回归树 资料转载: http://dataunion.org/5771.html        Classification And Regression Tree(CART)是决策 ...

  9. Form 提交表单

    ---HTML <form action="/Sample/SampleList/ExportSample" style="display:inline" ...

  10. mybatis-generator 代码自动生成工具(maven方式)

    由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,mybatis-gennerator插件帮我们自动生成mybatis所需要的 ...