zoukankan      html  css  js  c++  java
  • AsyncResult

    private static long CalculateFolderSize(string FolderName){ return FolderName.Length;}
    public delegate long CalculateFolderSizeDelegate(string FolderName);
    static void Main(string[] args)
    {
    CalculateFolderSizeDelegate d = CalculateFolderSize;
    Console.WriteLine("请输入文件夹名称(例如:C:\Windows):");
    string FolderName = Console.ReadLine();
    //通过异步调用静态方法CalculateFolderSize
    IAsyncResult ret = d.BeginInvoke(FolderName ,null,null);
    /*BeginInvoke
    第一个参数是定义委托时确定的方法签名镇南关的参数列表,
    * 第二个参数是当异步调用结束时自动回调的方法,
    * 第三个参数是用向第二个参数所确定的回调方法提供的额外信息,比如要回到的方法有参数,则可填充这些参数
    */
    Console.WriteLine("正在计算中,请耐心等待.........");
    //阻塞,等到调用完成,取出结果
    long size = d.EndInvoke(ret );
    /*EndInvoke
    * 负责生成一个IAsyncResult接口类型的对象并填充其字段
    * 该方法不断查询异步调用的方法是否执行完毕,根据委托类型的定义,该方法知道被异步调用的方法所有参数,所以当
    * 该方法发现异步调用完成时,它取出异步调用方法执行的结果作为其返回值,如果异步调用方法有声明ref和out的参数,它也负责填充它,
    * 正由该方法有一个不断轮询的过程,所以主线程程序在执行到调用该方法时会暂停,等待异步调用方法完成,取回结果再继续执行
    */

    Console.WriteLine(" 计算完成。文件夹{0}的容量为:{1}字节 ",FolderName,size );

    /*
    long Size;
    string FolderName;
    Console.WriteLine("请输入文件夹名称(例如:C:\Windows):");
    FolderName = Console.ReadLine();
    Size = CalculateFolderSize(FolderName);//不反回之前就无法继续往下执行
    Console.WriteLine(" 文件夹{0}的容量为:{1}字节 ",FolderName ,Size);
    * */
    Console .ReadLine();
    }

    }

  • 相关阅读:
    选择屏幕加功能码
    alv 列标题
    指针引用的学习
    CM3中数据传输对齐/非对齐方式
    perl学习笔记之:模式匹配,模块,文档
    PERL学习之模式匹配
    perl:split函数用法
    perl:_DATA_ _LINE_ _FILE_
    CVS update常用技巧
    cvs 文件无法上传debug
  • 原文地址:https://www.cnblogs.com/sumg/p/3742659.html
Copyright © 2011-2022 走看看