异步线程C#异步委托的使用

时间紧张,先记一笔,后续优化与完善。

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading;

    using System.Runtime.Remoting.Messaging;

    namespace 异步委托

    {

    /// <summary>

    

    /// 说明异步委托调用时会发生一个新的线程,不会阻塞主线程,
    /// 前提是应用回调函数,而不是直接应用委托的.endinvoke方法获取结果

    

    /// </summary>

    class Program

    {

        public delegate int AddDel(int x, int y);

        static void Main(string[] args)

        {

            //定义委托

            AddDel addDel = new AddDel(AddFunc);

            Console.WriteLine("主线程开始执行...{0}",Thread.CurrentThread.ManagedThreadId);

            //开始异步调用委托

            addDel.BeginInvoke(2, 3, Callback, 2);  //第三个参数回调函数,第四个参数,额定参数

    每日一道理
如果你们是蓝天,我愿做衬托的白云;如果你们是鲜花,我愿做陪伴的小草;如果你们是大树,我愿做点缀的绿叶……我真诚地希望我能成为你生活中一个欢乐的音符,为你的每一分钟带去祝福。

            Console.WriteLine("主线程执行完毕!");

            Console.ReadKey();

        }

        static int AddFunc(int x, int y)

        {

            Console.WriteLine("子线程在执行:{0}",Thread.CurrentThread.ManagedThreadId);

            Thread.Sleep(3000);

            return x + y;

        }

        static void Callback(IAsyncResult ar)

        {

            AsyncResult asy = (AsyncResult)ar;

            //获取代理信息

            AddDel addDel = (AddDel)asy.AsyncDelegate; 

            //获取返回结果

            int result = addDel.EndInvoke(ar);

            //获取额定参数

            int otherData = (int)asy.AsyncState;

            Console.WriteLine("子线程执行完毕!{0},执行结果:{1},额定参数:{2}",Thread.CurrentThread.ManagedThreadId

                                    ,result,otherData);

        }

    }

    }

文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   
  写字楼里写字间,写字间里程序员;
  程序人员写程序,又拿程序换酒钱。
  酒醒只在网上坐,酒醉还来网下眠;
  酒醉酒醒日复日,网上网下年复年。
  但愿老死电脑间,不愿鞠躬老板前;
  奔驰宝马贵者趣,公交自行程序员。
  别人笑我忒疯癫,我笑自己命太贱;
  不见满街漂亮妹,哪个归得程序员。

--------------------------------- 原创文章 By
异步和线程
---------------------------------

posted @ 2013-05-30 20:50  xinyuyuanm  阅读(173)  评论(0编辑  收藏  举报