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是使用主线程运行其代码的,并没有另起线程。
本文通过两个示例对比了C#中委托的BeginInvoke与Invoke方法的区别。BeginInvoke方法会在新线程中异步执行委托指定的方法,而Invoke则在当前线程同步执行。文章展示了BeginInvoke如何实现异步操作,以及Invoke导致的主线程阻塞。
197

被折叠的 条评论
为什么被折叠?



