zoukankan      html  css  js  c++  java
  • 【C#】用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程

    让我们首先了解下什么时候用到C#异步调用:

    .NET Framework 允许您C#异步调用任何方法。定义与您需要调用的方法具有相同签名的委托;公共语言运行库将自动为该委托定义具有适当签名的BeginInvoke 和EndInvoke 方法。

    BeginInvoke 方法用于启动C#异步调用。它与您需要异步执行的方法具有相同的参数,只不过还有两个额外的参数(将在稍后描述)。BeginInvoke 立即返回,不等待C#异步调用完成。BeginInvoke 返回IasyncResult,可用于监视调用进度。

    EndInvoke 方法用于检索C#异步调用结果。如果C#异步调用未完成,EndInvoke 将一直阻塞到C#异步调用完成。EndInvoke的参数包括您需要异步执行的方法的out 和ref 参数以及由BeginInvoke 返回的IAsyncResult。

    Deme如下:

    private static int newTask(int ms)
            {
                Console.WriteLine("任务开始");
                Thread.Sleep(ms);
                Random random = new Random();
                int n = random.Next(10000);//返回一个小于10000的随机数
                Console.WriteLine("任务完成");
                return n;
             
            }
    
            private delegate int NewTaskDelegate(int ms);
            static void Main(string[] args)
            {
                
                NewTaskDelegate task = newTask;
                IAsyncResult asyncResult = task.BeginInvoke(2000,null,null);
                // EndInvoke方法将被阻塞2秒
                int result = task.EndInvoke(asyncResult);
                Console.WriteLine(result);
                
            }
  • 相关阅读:
    Undo/Redo实现
    [CruiseControl]binary安装和启动
    perl读写文件和命令行解析
    C++跨平台IDE之CodeBlocks
    Swig实现多语言接口
    让人梦萦的西安小吃(转载)
    推荐:Visual Basic.NET Windows Forms 编程
    健康生活16个健康习惯
    推荐一个ASP的内容管理框架(ASP Nuke)
    《企业应用架构模式》读书笔记(1)
  • 原文地址:https://www.cnblogs.com/xuxml/p/8513798.html
Copyright © 2011-2022 走看看