码迷,mamicode.com
首页 > Windows程序 > 详细

C#中委托

时间:2016-04-20 00:18:22      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

    class Program
    {
        /*
       *这是需要异步执行的方法,COPY一个文件 
       */
        public void CopyFile(String fileName, out bool result)
        {
            Console.WriteLine("Move file " + fileName + "...");
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(200);
                Console.WriteLine("Move file is running..." + i);
            }
            Console.WriteLine("Move file finished");
            result = true;
        }
        /*
       *定义COPY文件的委托,将来CopyFile方法就委托给它去异步执行
       */
        public delegate void CopyFileDelegate(String fileName, out bool result);
        static void Main(string[] args)
        {
            bool result;
            Program aa = new Program();
            // 开始委托方法,以后都由copyFile这个变量来做事
            CopyFileDelegate copyFile = new CopyFileDelegate(aa.CopyFile);

            Console.WriteLine("[Main] Invoking the asynchronous " + " Copy file method");
            //委托调用异步方法去执行
            IAsyncResult iAR = copyFile.BeginInvoke("songlin.txt", out result, null, null);

            // 主方法不用等待COPY FILE方法,继续自己的事情
            Console.WriteLine("[Main] Doing other work");
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(200);
                Console.WriteLine("[Main]MainMethod is running..." + i);
            }


            Console.WriteLine(" [Main] Waiting for file transformation to finish");
            /* 主方法自己的事情做完,开始检查COPYFILE有没有完成。
             * 使用它的 WaitOne 方法将执行一直等到发出 WaitHandle 信号,然后调用 EndInvoke。
             * 注意:异步调用完成时会发出 WaitHandle 信号,可以通过WaitOne 来等待它*/
            iAR.AsyncWaitHandle.WaitOne();

            Console.WriteLine("[Main] Copy file finished, cleaning up");
            /* EndInvoke 方法用于检索异步调用结果。调用 BeginInvoke 后可随时调用 EndInvoke 方法;
             * 如果异步调用未完成,EndInvoke 将一直阻塞到异步调用完成。
             */
            copyFile.EndInvoke(out result, iAR);

            Console.WriteLine("[Main] The result is {0}", result);
            Console.ReadLine();

        }
    }

 

C#中委托

标签:

原文地址:http://www.cnblogs.com/tianboblog/p/5410585.html

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