使用异步委托执行线程(delegate)】的更多相关文章

由于异步委托产生的线程与应用程序主线程是分开执行的,若主线程要获取异步委托线程的结果,则主线程需要等待异步委托的执行结果. BeginInvoke是Delegate类型的一个方法,它的返回类型为IAsyncResult,通过该接口,可以获得异步委托的执行信息. 1.投票技术:等待异步委托结果的一种方法是投票技术,该技术的实现原理是通过IAsyncResult接口的IsComplete属性来检查委托是否完成了任务.EndInvote方法获取执行结果.举个例子,如下: 执行后的效果: 2.访问等待句…
/// <summary> /// 异步委托 /// </summary> public delegate void AsyncHandler(); public static class AsyncHelper { public static void AsyncResult(AsyncHandler asyncHandler) { IAsyncResult asyncResult = asyncHandler.BeginInvoke(new AsyncCallback(endI…
最近有个项目需要每天固定的时间去执行指定的事件,发现网上关于这样的文章比较少,而且比较散.通过学习了几篇文章后终于实现了这个功能,在此也特别感谢这些文章的作者们,这也是我第一次在园子里面发文章,望多指教. 关于观察者模式,我在这里就不做讲解了,如有不懂,可以参考相关文章. 那么开始入正题. 主要有三个页面:Observer.cs(观察者).Subject.cs(通知者).Form1.cs Observer.cs class Observer { /// <summary> /// 执行事件A…
单靠自己看书学总是会走很多弯路,任何人也不列外,有些时候自己遇到的很多问题,其它别人在很久之前也可能遇到过,上网查查可以走很大捷径,对自己的学习有很大帮助,刚开始弄线程这块,一开始只是看书,很多东西都是糊里又糊涂. 首先感谢下这位仁兄的解读http://www.cnblogs.com/renhaojie/archive/2009/09/10/1564052.html,我在这里只做下自己迷惑的地方的解读. 1,Delegate.BeginInvoke是开起一个新的异步线程执行委托,而Delegat…
了解IAsyncResult 现在我们已经了解,EndInvoke可以给我们提供传出参数与更新后的ref参数:也可以向我们导出异步函数中的异常信息.例如,我们使用BeginInvoke调用了异步函数Sleep,它开始执行.之后调用EndInvoke,可以获取Sleep何时执行完成.但如果我们在Sleep执行完成20分钟后,才去调用EndInvoke呢?EndInvoke仍然会给我们提供传出值及异步中的异常(假如产生了异常),那么这些信息到底存储在哪里?EndInvoke如何在函数执行如此久之后仍…
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. 介绍 这篇文章将介绍异步调用的实现机制及如何调用异步方法.大多数.NET开发者在经过delegate.Thread.AsynchronousInvocation之后,通常都会对以上概念产生混淆及误用.实际上,以上概念是.NET2.0版本中对并行编程的核心支持,基于概念上的错误认识有可能导致在实际的…
线程:是程序中独立的指令流.在我们熟悉的Visual Studio编辑器中输入C# 代码的时候,系统会自动分析代码,提示你输入的代码出现的各种错误,这是一个后台线程完成的. 创建线程的一种简单的方式就是定义一个委托,并一部调用它.Delegate类支持异步调用方法,在后台,Delegate类会创建一个执行任务的线程. 为了说明委托的异步性,从一个需要一定时间的方法讨论,方法如下所示: static int TakesAWhile(int data, int ms) { Console.Write…
创建线程的一种简单方式是定义一个委托,并异步调用它.委托是方法的类型安全的引用. Delegate还支持异步地调用方法.在后台Delegate类会创建一个执行任务的线程. 为了说明委托的异步特性,从一个需要一定的时间才能执行完毕的方法开始. TakesAWhile方法至少需要经过第2个变量传递的毫秒数才能执行完,因 为它调用了Thread.Sleep()方法. static int TakesAWhile(int data, int ms) { Console.WriteLine("TakesA…
//定义委托 delegate string MyDelegate(string name); //定义委托调用函数 public string Hello(string name) { Thread.Sleep(); //虚拟异步工作 return "Hello " + name; } //以下调用并获取返回值 private void Form1_Load(object sender, EventArgs e) { //建立委托 MyDelegate myDelegate = ne…
定义一个委托调用的方法:TakesAWhile //定义委托要引用的方法 private static int TakesAWhile(int data, int ms) { Console.WriteLine("开始..."); //当前线程(委托线程)阻塞ms毫秒 Thread.Sleep(ms); Console.WriteLine("完成!"); return ++data; } //定义委托要引用的方法 private static int TakesAW…