码迷,mamicode.com
首页 > 其他好文 > 详细

委托的BeginInvoke和EndInvoke

时间:2015-06-04 18:44:08      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

刚刚搞明白了C#的异步调用,写下来,方便后续调用。

异步主要是解决UI假死的问题,而开辟出一个新的线程,处理大数据。

1.既然是委托的调用,那么先定义个委托:

public delegate bool CheckUpdateFile();

2.定义一个将要工作的委托函数,和委托类型一致

private bool Press()
        {
            //处理大数据
            //如读取大文件,网络通讯等
            return true;
        }

 3.声明及初始化委托实例,运行该实例

BeginInvoke( AsyncCallback callback,object @object) //原型

需要一个带有IAsyncResult 参数类型的函数,如:private void callback(IAsyncResult ar)

CheckUpdateFile fun = new CheckUpdateFile(Press);
fun.BeginInvoke(callback, fun);
//回调函数
private void callback(IAsyncResult ar)//该参数功能强大,万能型,可以传object
        {
            if (!ar.IsCompleted) return;//没有完成,不结束改线程。
            var fun = (CheckUpdateFile)ar.AsyncState;//强类型转换为委托对象
            var isok = fun.EndInvoke(ar);//结束后返回委托Press的结果
            if (isok)
            {
                Invoke((EventHandler)delegate
                {
                  //匿名方法体,委托完成后,将要做什么。
                 });
            }
        }         

 

二、还可以使用匿名函数来写

var fun = new CheckUpdateFile(Press);
fun.BeginInvoke(ar =>
{
      if (!ar.IsCompleted) return;
      //var fun = (CheckUpdateFile)ar.AsyncState;声明在前部分,不需要转换。
      var isok = fun.EndInvoke(ar);//结束后返回委托Press的结果
if (isok) { Invoke((EventHandler)delegate { }); } }, fun);//fun可写为null,匿名函数中不需要转换

 

委托的BeginInvoke和EndInvoke

标签:

原文地址:http://www.cnblogs.com/ankeyliu/p/4552367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!