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(); } } }
相关推荐
使用`try-catch`块可以捕获并处理异步操作中可能抛出的异常。同时,考虑使用`TaskCanceledException`来处理用户取消操作的情况。 最后,优化异步代码时,应避免过度使用`await`。如果一个方法中大部分时间都在等待...
C#作为.NET框架的主要编程语言,虽然原生支持异步编程模型,但在处理串口通信时,往往需要借助于Win32 API来实现更底层的控制。本篇文章将深入探讨如何在C#中进行异步数据接收,通过串口操作发送和接收AT指令,并以...
在C#编程中,异步调用外部程序是一种常见的需求,尤其在处理耗时操作或者不希望阻塞主线程执行的情况下。本篇文章将深入探讨如何使用C#来实现这一功能,以及相关的知识点。 首先,我们需要了解异步编程的基本概念。...
"c# 串口类 纯异步接收"是一个关于如何利用C#语言的`System.IO.Ports.SerialPort`类进行纯异步数据接收的专题。这个标题暗示了我们将在程序设计中不使用同步阻塞的方式,而是借助事件驱动和回调函数来处理串口数据的...
本文将深入探讨C#中如何实现UDP的异步发送和接收,这对于构建实时、低延迟的网络应用尤其重要。 UDP是一种无连接的、不可靠的传输协议,它不保证数据包的顺序或完整性,但具有较低的开销,适合实时视频、音频流传输...
在C# WinForm开发中,异步编程是一个重要的技术,特别是在处理大数据量或者长时间运行的任务时,为了保证用户界面的响应性,我们通常会采用非阻塞的方式执行这些任务。"C# WINFORM 异步 弹出请稍等提示"这个主题就...
C# WinForm异步不卡界面的实现方法 在WinForm开发中,避免界面卡死是非常重要的一点。界面卡死的原因是因为耗时任务的计算占用了主线程,导致主界面没有办法进行其它操作。这篇文章将为您介绍如何使用异步编程来...
C#语言,运用TCP异步收发信息。客户端只要知道服务器端IP和端口号,就可以和服务器建立连接,异步收发信息。本实例包括服务器端和客户端程序,并且有很详细的注释,希望大家看后能有一定的收获。
VS2013支持.net框架4.0,该版本引入了Task类和异步编程模型,使得处理这种需求变得更加便捷。本文将详细探讨如何在WinForm应用中使用异步线程来刷新UI,并实时反馈任务进度。 首先,让我们了解什么是异步编程。异步...
在C#编程中,异步处理是提升用户体验的关键技术之一,特别是在进行大型数据计算、平差、分析、建模和预测等耗时操作时。"c#进度条异步显示.rar"这个压缩包文件可能包含了一个示例项目,用于演示如何在C#中实现一个不...
在C#编程中,异步操作是现代应用开发的关键特性,尤其在处理大量I/O密集型任务时,如文件拷贝。异步编程允许程序在等待长时间运行的操作完成时,继续执行其他任务,从而提高应用程序的响应性和效率。本主题将深入...
总的来说,C#的`async`和`await`关键字提供了一种优雅的方式来实现与SQL Server数据库的异步连接,这对于处理I/O密集型操作,如数据库交互,是非常理想的。通过这种方式,开发者可以编写出更加流畅、高效的代码,...
c#socket异步编程及断线重连。并怎样实现循环接受服务器的命令并处理。
C#中,Socket类提供了多个异步方法,如`BeginConnect`、`BeginSend`、`BeginReceive`等,这些方法通过回调函数处理完成后的操作。 3. **C# Winform结合Socket**: 在Windows Forms环境下,我们通常会创建一个UI...
本篇文章将深入探讨C#中的同步与异步读写,并结合“第一次实验(同步与异步读写)”的实践案例进行解析。 首先,我们要理解同步和异步的基本概念。同步操作意味着代码执行是线性的,一个任务必须等待另一个任务完成...
4. **服务器端处理**:在服务器端,处理异步请求的方法接收到请求后,实例化用户控件,执行必要的逻辑,然后将控件的HTML输出返回给客户端。 5. **更新DOM**:在客户端,收到服务器返回的HTML后,使用jQuery的.html...
在C# Windows Forms桌面应用程序开发中,异步刷新控件是一项关键的技术,它能提高程序的响应速度,尤其是在处理大量数据或执行长时间操作时。本主题将深入探讨如何异步刷新TextBox和DataGridView控件,以避免阻塞UI...
这里我们将深入探讨C#中的定时器使用,特别是`System.Timers.Timer`和`System.Windows.Forms.Timer`,以及如何结合异步委托(如`BeginInvoke`)来实现非阻塞的异步调用。 首先,`System.Timers.Timer`通常用于...
在C#编程中,异步进度条操作是一个关键的用户界面(UI)更新技术,它允许在后台执行耗时操作的同时,保持用户界面的响应和更新进度信息。本主题将深入探讨如何使用C#实现这样的功能,特别是涉及`BackgroundWorker`...
在IT行业中,网络编程是至关重要的一个领域,而C#作为一种强大的编程语言,提供了丰富的工具和技术来处理网络通信。本文将深入探讨"C# socket异步长连接"这一主题,包括其概念、工作原理以及如何在实际开发中实现。 ...