C#中BeginInvoke和EndInvoke的用法

来源:互联网 发布:windows search索引器 编辑:程序博客网 时间:2024/05/17 14:19
有时候, 我们希望在当前UI线程中去做另一件费时的事, 但是我们知道:在当前UI线程中直接调用一个类似while(true)这样的操作, 我们的UI会出现无响应的情况. 如何避免这种情况呢, C#为我们准备了BeginInvoke和EndInvoke.
首先定义一个委托:
private delegate int ConsumeTimeDelegate(int iPercent);

然后写一个非常操作的方法, 当然方法的签名要和委托一致.

private int ConsumeTimeFunc(int iPercent){    int i = 0;    for(i = 0; i < 100000; i++)    {         Console.WriteLine(i.ToString());    }        iPercent = i;    return iPercent;}

再添加一个完成方法
private void MethodCompleted(IAsyncResult asyncResult){    if (null == asyncResult)        return;    String str = (asyncResult.AsyncState as MyDelegate).EndInvoke(asyncResult).ToString();    Console.WriteLine("---------MethodCompleted() called. str:" + str);}

最后是我们的调用方法:
ConsumeTimeDelegate consumeDelegate = ConsumeTimeFunc;IAsyncResult asyncResult = consumeDelegate.BeginInvoke(0, MethodCompleted, consumeDelegate);


原创粉丝点击