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. php设计模式----工厂模式

    工厂模式主要是为了代码执行的时候更灵活地new对象,就像工厂流水线一样,批量生产出产品. 目的:简化对象生成过程,更加灵活. 例子如下: <?php /** * User: freephp * ...

  2. Oracle多关键字查询

    因项目需要,在某查询页面的查询字段支持多关键字查询,支持空格隔开查询条件,故实现如下: 使用的原理是:ORACLE中的支持正则表达式的函数REGEXP_LIKE, '|' 指明两项之间的一个选择.例子 ...

  3. 关于元素加上margin属性后以谁为基准移动的问题及负margin的问题

    突然想起这个问题,这是很基础很基础的问题啊,但之前很多次都忘记了,然后困扰了我很久.不清不楚的感觉很不好,所以要做成笔记比较好记住,好记性不如烂笔头,以后再次困惑了再回来看看.推荐文章,海玉的< ...

  4. cache数据库学习周结

    学习cache数据库只有两周,下面说一下对这一数据库的理解吧.不一定对 cache数据库最大的特点是global: global就像全区变量一样,是一个广义的全局变量.数据库表中的一些重要的字段名以字 ...

  5. shell 读取文件

    #!/bin/bash content=`cat test.txt` echo "begin" for i in $content do echo $i done 读取前10行 t ...

  6. 微信小程序-scroll-view隐藏滚动条

    在书写网页的时候,往往会为了页面的美观,而选择去掉滚动区域默认的滚动条,而在这里,就是为小程序去掉滚动条的其中的一种方法: scroll-view.wxml: scroll-view.wxss scr ...

  7. Ueditor文件上传问题

    我们在做一些网站是会遇到,要有上传文件一类的事情. 我发现百度的富文本编辑器带上传功能,但是没有办法给后台传递我们要的参数. 先在ueditor.all.js中找到, me.execCommand(' ...

  8. 嗯,这个BLOG其实是个更新服务器

    2333 软件:http://dwz.cn/NKSGUI

  9. javaee 规范技术

    J2EE的13种核心技术 一.JDBC(Java Database Connectivity) JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问 ...

  10. Java Calendar日历类的使用

    Calendar cal = Calendar.getInstance(); // 当前年 int year = cal.get(Calendar.YEAR); // 当前月 int month = ...