c#的BeginInvoke和EndInvoke使用demo

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#的BeginInvoke和EndInvoke使用demo相关的知识,希望对你有一定的参考价值。

BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        private delegate int NewTaskDelegate(int ms,string msg);
        private static int newTask(int ms, string msg)
        {
            Console.WriteLine("任务开始");
            Thread.Sleep(ms);
            Random random = new Random();
            int n = random.Next(10000);
            Console.WriteLine("任务完成" + msg);
            return n;
        }
        static void Main(string[] args)
        {
            AsyncCallback asyncCallback = new AsyncCallback(MyAsyncCallback);
            NewTaskDelegate task = new NewTaskDelegate(newTask);
            IAsyncResult asyncResult = task.BeginInvoke(2000,"fk", asyncCallback, task);

            // EndInvoke方法将被阻塞2秒   
            //int result = task.EndInvoke(asyncResult);
            //Console.WriteLine(result);
            Console.ReadLine();
        }
        public static void MyAsyncCallback(IAsyncResult iar)
        {
            int str;
            NewTaskDelegate dlgt = (NewTaskDelegate)iar.AsyncState;
            str = dlgt.EndInvoke(iar);
            Console.WriteLine("the Delegate call returned string:{0}", str);
        }
    }


}

  

以上是关于c#的BeginInvoke和EndInvoke使用demo的主要内容,如果未能解决你的问题,请参考以下文章

c# 从delegate.begininvoke 捕获异常而不调用delegate.endinvoke

异步使用委托delegate --- BeginInvoke和EndInvoke方法

c# 在回调中调用 endinvoke,使用泛型

Invoke,BeginInvoke,EndInvoke

多线程 异步 beginInvoke EndInvoke 使用

C#异步调用四大方法详解