委托的异步调用示例(1)
2010-02-03 09:36
288 查看
2008-06-29 20:18
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace 委托的异步调用 { public delegate void DelegateClass();//定义委托分类DelegateClass class Starter { static void Main(string[] args) { DelegateClass del = MethodA;//定义委托对象del DelageteStateBag state = new DelageteStateBag();//状态值state IAsyncResult ar = del.BeginInvoke(Callback, state);// 开始委托的异步调用 if (ar.IsCompleted == true) Console.WriteLine("MethodA completed"); else Console.WriteLine("MethodA not completed"); ar.AsyncWaitHandle.WaitOne(); Thread.Sleep(100); lock(state) { Console.WriteLine("Back in Main"); Console.WriteLine(state.message); } } /// <summary> /// 完成异步委托时的调用方法 /// </summary> /// <param name="ar"></param> public static void Callback(IAsyncResult ar) { DelageteStateBag state = (DelageteStateBag)ar.AsyncState; lock (state) { Console.WriteLine("Callback Running"); ((DelageteStateBag)ar.AsyncState).message = "state object modified in callback."; } } public static void MethodA() { Console.WriteLine("MethodA running ...."); Thread.Sleep(200); } } class DelageteStateBag { public string message; } } //注:Main()方法末尾有一个thread.sleep()语句,该语句如果被删除,在Main()和CallBack() //例程间会存在竞争。因为 ar.AsyncWaitHandle.WaitOne()语句产生阻塞,当MethodA()执行完成时,阻塞消失 , //Main()和CallBack()都将继续,竞争开始。Main()Sleep()之后,允许CallBack()允许为共享的state对象加锁。 |
相关文章推荐
- c#委托的异步调用 简单示例
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- 20160711--C# 委托的三种调用示例(同步调用 异步调用 异步回调)【转载】
- C# 委托的三种调用示例(同步调用 异步调用 异步回调) 之 FUNC 版
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C#异步调用示例详解
- 利用委托实现异步调用
- 委托之实现异步调用
- C#异步委托调用实例分析
- C# 委托的同步调用和异步调用
- VB.NET异步委托调用实现串口的自收自发
- (二)线程--通过委托异步调用方法
- C#委托异步调用简介
- 使用XMLHttprequest对象进行异步调用html页面的示例
- C# 委托的同步调用和异步调用
- C# 多线程 用委托实现异步_调用委托的BeginInvoke和EndInvoke方法
- 【转】谈.Net委托与线程——创建无阻塞的异步调用
- Orchard 源码探索(Application_Start)之异步委托调用