C# delegate方法invoke和beginInvoke的区别

class Program

{

delegate void test();

static void Main(string[] args)

{

test ts = new test(TestDelegate);

ts.BeginInvoke(null,null); //使用到委托的beginInvoke方法

Console.WriteLine("hello");

}

internal static void TestDelegate()

{

Thread.Sleep(5000);

}

}

上面程序代码中使用到begininvoke方法,此时控制台会立刻输出hello字符,然后结束主程序运行。由此可知beginInvoke是在主线程之外,另起了一个线程来运行其所需的代码,可以理解为异步调用。

再看下面这点程序

class Program

{

delegate void test();

static void Main(string[] args)

{

test ts = new test(TestDelegate);

ts.Invoke(); //使用到委托的invoke方法

Console.WriteLine("hello");

}

internal static void TestDelegate()

{

Thread.Sleep(5000);

}

}

唯一区别就是使用到了 invoke方法,此时控制台会等待5秒,然后才输出hello字符。由此可知invoke是使用主线程运行其代码的,并没有另起线程,可以理解为同步调用。