C#中委托
2016-04-19 22:45
253 查看
class Program { /* *这是需要异步执行的方法,COPY一个文件 */ public void CopyFile(String fileName, out bool result) { Console.WriteLine("Move file " + fileName + "..."); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.WriteLine("Move file is running..." + i); } Console.WriteLine("Move file finished"); result = true; } /* *定义COPY文件的委托,将来CopyFile方法就委托给它去异步执行 */ public delegate void CopyFileDelegate(String fileName, out bool result); static void Main(string[] args) { bool result; Program aa = new Program(); // 开始委托方法,以后都由copyFile这个变量来做事 CopyFileDelegate copyFile = new CopyFileDelegate(aa.CopyFile); Console.WriteLine("[Main] Invoking the asynchronous " + " Copy file method"); //委托调用异步方法去执行 IAsyncResult iAR = copyFile.BeginInvoke("songlin.txt", out result, null, null); // 主方法不用等待COPY FILE方法,继续自己的事情 Console.WriteLine("[Main] Doing other work"); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.WriteLine("[Main]MainMethod is running..." + i); } Console.WriteLine(" [Main] Waiting for file transformation to finish"); /* 主方法自己的事情做完,开始检查COPYFILE有没有完成。 * 使用它的 WaitOne 方法将执行一直等到发出 WaitHandle 信号,然后调用 EndInvoke。 * 注意:异步调用完成时会发出 WaitHandle 信号,可以通过WaitOne 来等待它*/ iAR.AsyncWaitHandle.WaitOne(); Console.WriteLine("[Main] Copy file finished, cleaning up"); /* EndInvoke 方法用于检索异步调用结果。调用 BeginInvoke 后可随时调用 EndInvoke 方法; * 如果异步调用未完成,EndInvoke 将一直阻塞到异步调用完成。 */ copyFile.EndInvoke(out result, iAR); Console.WriteLine("[Main] The result is {0}", result); Console.ReadLine(); } }
相关文章推荐
- C#事件
- 老话题之C#写邮件发送
- C#中的事务用法实例分析
- 实验二 C#程序设计 总结
- c#学习笔记七 接口和抽象类对比
- c# 一维数组和二维数组的定义几种方式
- C# struct的陷阱:无法修改“...”的返回值,因为它不是变量
- C# 中的结构类型(struct)
- C#单例模式的三种写法
- C#OOP之一面向对象简介
- C#OOP之一面向对象简介
- C#OOP之一面向对象简介
- C# OOP程序设计目录
- C# OOP程序设计目录
- C# OOP程序设计目录
- C# list存储的数据格式以及默认初始化空间,内存回收分析
- C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法
- C#学习笔记三: C#2.0泛型 可控类型 匿名方法和迭代器
- C#学习笔记二: C#类型详解
- C#中的类,结构体课堂笔记