using System; namespace ConsoleApplication1 { class Class1 { public delegate void AsyncEventHandler(); void Event1() { Console.WriteLine("Event1 Start"); System.Threading.Thread.Sleep(2000); Console.WriteLine("Event1 End"); } void Event2() { Console.WriteLine("Event2 Start"); int i=1; while(i<500) { i=i+1; // Console.WriteLine("Event2 "+i.ToString()); } Console.WriteLine("Event2 End"); } void CallbackMethod(IAsyncResult ar) { ((AsyncEventHandler) ar.AsyncState).EndInvoke(ar); } [STAThread] static void Main(string[] args) { long start=0; long end=0; Class1 c = new Class1(); Console.WriteLine("ready"); start=DateTime.Now.Ticks; /*** 同步 ****/ c.Event1(); c.Event2(); end = DateTime.Now.Ticks; Console.WriteLine(" 同步 时间刻度差=" + Convert.ToString(end - start)); /*** 异步1 ****/ start = DateTime.Now.Ticks; AsyncEventHandler asy = new AsyncEventHandler(c.Event1); IAsyncResult ia = asy.BeginInvoke(null, null); c.Event2(); asy.EndInvoke(ia); end = DateTime.Now.Ticks; Console.WriteLine(" 异步1 时间刻度差=" + Convert.ToString(end - start)); /*** 异步2 ****/ start = DateTime.Now.Ticks; AsyncEventHandler asy2 = new AsyncEventHandler(c.Event1); IAsyncResult ia2 = asy2.BeginInvoke(null, null); c.Event2(); while (!ia2.IsCompleted) //IAsyncResult.IsCompleted属性获取异步操作是否已完成的指示,发现异步调用何时完成. { } asy2.EndInvoke(ia2); end = DateTime.Now.Ticks; Console.WriteLine(" 异步2 时间刻度差=" + Convert.ToString(end - start)); /*** 异步3 ****/ /*** * IAsyncResult.AsyncWaitHandle属性获取用于等待异步操作完成的WaitHandle * WaitHandle.WaitOne方法阻塞当前线程,直到当前的WaitHandle收到信号 * 使用WaitHandle,则在异步调用完成之后,但在通过调用EndInvoke结果之前,可以执行其他处理 ***/ start = DateTime.Now.Ticks; AsyncEventHandler asy3 = new AsyncEventHandler(c.Event1); IAsyncResult ia3 = asy3.BeginInvoke(null, null); c.Event2(); ia3.AsyncWaitHandle.WaitOne(); end = DateTime.Now.Ticks; Console.WriteLine(" 异步3 时间刻度差=" + Convert.ToString(end - start)); /*** 异步4 ****/ /*** * 如果启动异步调用的线程不需要处理调用结果,则可以在调用完成时执行回调方法 * 要使用回调方法,必须将代表该方法的AsyncCallback委托传递给BeginInvoke ***/ start = DateTime.Now.Ticks; AsyncEventHandler asy4 = new AsyncEventHandler(c.Event1); asy4.BeginInvoke(new AsyncCallback(c.CallbackMethod), asy4); c.Event2(); end =DateTime.Now.Ticks; Console.WriteLine(" 异步4 时间刻度差=" + Convert.ToString(end - start)); Console.ReadLine(); } } }
相关推荐
C#异步操作 异步查询数据库 异步处理一行一行加载数据
C#实现异步调用外部程序!
主要给大家介绍了关于c# winform异步不卡界面的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
C#语言,运用TCP异步收发信息。客户端只要知道服务器端IP和端口号,就可以和服务器建立连接,异步收发信息。本实例包括服务器端和客户端程序,并且有很详细的注释,希望大家看后能有一定的收获。
c#socket异步编程及断线重连。并怎样实现循环接受服务器的命令并处理。
在加载数据时,如果数据过多,可以弹出一个请稍等的窗体,当数据加载完毕后把这个窗体给关掉,主要采用BackgroundWorker这个类进行操作
使用开发工具为VS2013;.net:4.0 多线程异步刷新ui界面,实时获取任务进度并进行反馈。
winfrom 实现异步操作,C#实现异步,具体实现请看代码吧
c# progress 异步显示 进度条 不卡死 顺畅 方便 简洁 可应用于大型数据计算、平差、分析、建模和预测
C#实现异步拷贝多个文件到指定的目录,以及数据线程访问ui线程控件的方法。
c#文件异步操作示例,File Async FileStream
使用C#调用传统32位API实现串口操作,整个结构特别的简单,完整代码,下载即可使用!
C# Socket异步聊天例,相关介绍参见我的博客
C# 5.0 异步编程技术,关注C#新的异步编程特性。
C#实现异步TCP 通信,含服务端和客户端,很好的一个范例。
简单定时器使用及delegate的begininvoke,测试其异步调用是否真的开辟了线程,同时提供异步委托执行完成后的函数处理
这是一个c#异步通信的例子在vs2005上调试通过。
C#实现异步的进度条操作,学会了这个操作,基本上会对界面多线程方面的知识有所了解!
C# Socket异步通信,服务端,客户端通信
系统自用 ,通过事件触发接收数据,需要的人可以拿走。。