zoukankan      html  css  js  c++  java
  • C#中委托

        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();
    
            }
        }
  • 相关阅读:
    English trip -- VC(情景课)9 A Get ready
    English trip -- Review Unit8 Work 工作
    English trip -- VC(情景课)8 D Reading
    bzoj 4238 电压
    luoguP2154 [SDOI2009]虔诚的墓主人
    bzoj 2225 [Spoj 2371]Another Longest Increasing
    bzoj 4383 [POI2015]Pustynia
    luogu3706 [SDOI2017]硬币游戏
    luogu P6125 [JSOI2009]有趣的游戏
    luogu4443 coci 2017 Dajave
  • 原文地址:https://www.cnblogs.com/tianboblog/p/5410585.html
Copyright © 2011-2022 走看看