zoukankan      html  css  js  c++  java
  • 使用BeginInvoke,EndInvoke异步调用委托

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
      
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Main ThreadId = " + Thread.CurrentThread.ManagedThreadId);
                //给委托赋值
                Func<long, long> delegateMethod = new Func<long, long>(CalcSum);
                //异步执行委托,这里把委托本身作为asyncState对象传进去,在回调函数中需要使用委托的EndInvoke来获得结果
                delegateMethod.BeginInvoke(200, DoneCallback, delegateMethod);
                //异步执行委托,抛出异常
                delegateMethod.BeginInvoke(10000000000, DoneCallback, delegateMethod);
                Console.ReadLine();
            }
      
            //委托回调函数
            static void DoneCallback(IAsyncResult asyncResult)
            {
                //到这儿委托已经在异步线程中执行完毕
                Console.WriteLine("DoneCallback ThreadId = " + Thread.CurrentThread.ManagedThreadId);
      
                Func<long, long> method = (Func<long, long>)asyncResult.AsyncState;
                //委托执行的异常会在EndInvoke时抛出来
                try {
                    //使用BeginInvoke时传入委托的EndInvoke获得计算结果,这时候计算结果已经出来了,有异常的话也在这儿抛出来
                    long sum = method.EndInvoke(asyncResult);
                    Console.WriteLine("sum = {0}",sum);
                }
                catch (OverflowException)
                {
                    Console.WriteLine("运算溢出了");
                }
            }
      
            //委托方法
            static long CalcSum(long topLimit)
            {
                //委托在另一个线程中开始执行
                Console.WriteLine("Calc ThreadId = " + Thread.CurrentThread.ManagedThreadId);
                checked
                {
                    long result = 0;
                    for (long i = 0; i < topLimit; i++)
                    {
                        result += i;
                    }
                    return result;
                }
            }
        }
      
    }
  • 相关阅读:
    纪念Google Reader—Google Reader的最后一天
    SlickEdit 18.0 版本发布 同时更新破解文件
    Linux设置中文的man手册
    Android按钮单击事件的五种实现方式
    使用VBS脚本语音朗读文字
    JavaGUI设置windows主题外观
    EL表达式
    自己封装的一个Ajax小框架
    微信公众号清除内存缓存
    墨刀编辑微信端 原型设计
  • 原文地址:https://www.cnblogs.com/lidabo/p/2512821.html
Copyright © 2011-2022 走看看