易采站长站为您分析C#中Invoke 和 BeginInvoke 的真正涵义,需要的朋友可以参考下
BeginInvoke 方法真的是新开一个线程进行异步调用吗?
参考以下代码:
- public delegate void treeinvoke(); private void UpdateTreeView()
- { MessageBox.Show(System.Threading.Thread.CurrentThread.Name);
- } private void button1_Click(object sender, System.EventArgs e)
- { System.Threading.Thread.CurrentThread.Name = "UIThread";
- treeView1.BeginInvoke(new treeinvoke(UpdateTreeView)); }
看看运行结果,弹出的对话框中显示的是 UIThread,这说明 BeginInvoke 所调用的委托根本就是在 UI 线程中执行的。
既然是在 UI 线程中执行,又何来“异步执行”一说呢?
我们再看看下面的代码:
- public delegate void treeinvoke(); private void UpdateTreeView()
- { MessageBox.Show(Thread.CurrentThread.Name);
- } private void button1_Click(object sender, System.EventArgs e)
- { Thread.CurrentThread.Name = "UIThread";
- Thread th = new Thread(new ThreadStart(StartThread)); th.Start();
- } private void StartThread()
- { Thread.CurrentThread.Name = "Work Thread";
- treeView1.BeginInvoke(new treeinvoke(UpdateTreeView)); }
再看看运行结果,弹出的对话框中显示的还是 UIThread,这说明什么?这说明 BeginInvoke 方法所调用的委托无论如何都是在 UI 线程中执行的。










