c#begininvoke和invoke,begininvoke

  c#begininvoke和invoke,begininvoke

  之前我已经说过BeginInvoke和Invoke的异同。

  endinvoke的意思是。

  我们知道beginvoke就是通过调用线程来异步完成一些工作。一般来说,你只需要启动它,并保持其运行。比如你用begininvoke修改界面显示,它每次修改都会自动改变界面显示,因为是在后台执行的。

  但是有时候我们需要知道它的结尾信息,我们在结尾有计划。这时你就需要endinvoke了。

  让我们来看看begininvoke的返回值类型:

  1:公共接口IAsyncResult

  2: {

  3:对象AsyncState { get}

  4:

  5:wait handle AsyncWaitHandle { get;}

  6:

  7:bool synchronously completed { get;}

  8:

  9:bool is completed { get;}

  10: }

  根据BeginInvoke返回的结果,我们有两种方法调用异步操作:

  IAsyncResult的IsCompleted属性在异步操作后将返回true,否则将返回false。然后我们可以在一个循环中访问IsCompleted属性,然后在IsCompleted为true时调用EndInvoke方法。

  //在中定义的委托。Net在这里用来执行BeginInvoke

  Func int long time action=new Func int(long time method);

  IAsyncResult asyn result=long time action。BeginInvoke(null,null);

  //你可以做其他事情

  而(!异步结果。IsCompleted)

  {

  //当它不为真时,执行此处的代码

  }

  int result=longTimeAction。endin voke(asyn result);//为真时,返回结果显示。

  等等

  IAsyncResult中还有一个AsyncWaitHandle属性,它是一个WaitHandle类型属性。这个对象有一个WaitOne方法,它也可以接受一个超时,它将等待这个超时的指定长度:

  Func int long time action=new Func int(long time method);

  IAsyncResult asyn result=long time action。BeginInvoke(null,null);

  //你可以继续处理其他事情

  If (asynresult。asyncwaithandle.waitone (10000,true))//判断结果是否为真,只等你10s。

  {

  int result=longTimeAction。endin voke(asyn result);

  }

  调用后,继续做其他事情。做完了就过来等结果。如果invoke太慢,你就只能错过了~ ~

  其实不管上面的方法是polling还是WaitOne用来等待一个信号量,还是要等的。等待是一件很讨厌的事情。Net考虑到了这一点,为我们准备了一个回调方法:你进行异步调用后,继续做你的业务,完成后通知我一声即可。

  Func int long time action=new Func int(long time method);

  //这里用了一个lambda表达式,很省力。

  IAsyncResult asyn result=long time action。BeginInvoke((结果)={

  int ret=longTimeAction。EndInvoke(结果);

  },null);

  异步操作完成后,会执行上面代码中lambda表达式表示的回调方法,其中调用EndInvoke得到耗时操作的结果。

  转自:http://www.cnblogs.com/Tammie/archive/2011/09/07/2169491.html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: