問候, 我正在C#中開發一些應用程序。目前,我正在處理線程問題,我有一個問題,我腦海裏想着。 Invoke和BeginInvoke有什麼區別? 我讀了一些線索,我在這裏找到一些有用的信息:hereInvoke和BeginInvoke
然而就是在下面的代碼中調用和BeginInvoke的區別:
private void ProcessRoutine()
{
for (int nValue = StartFrom; nValue <= EndTo; nValue++)
{
this.Invoke(this.MyDelegate, nValue);
//this.BeginInvoke(this.MyDelegate, nValue);
}
MessageBox.Show("Counting complete!");
}
private void MessageHandler(int progress)
{
lblStatus.Text = lblStatus.Text = "Processing item: " + progress.ToString();
progressBar1.Value = progress;
}
其中MyDelegate是的MessageHandler函數的引用。
我注意到使用BeginInvoke lblStatus.Text不刷新使用Invoke刷新標籤的地方。 另外我知道Invoke等待它的執行完成。 我感興趣的最重要的案例是爲什麼在這種情況下刷新標籤文本有所不同。
調用的BeginInvoke並不意味着它不會在用戶界面上執行線。這意味着它在與「this」關聯的線程上被異步調用,這可能是UI線程。 – 2009-12-15 19:50:20
所以如果它不在另一個線程中,它是如何工作的呢? – 2009-12-15 20:18:52
從MSDN:「在創建控件的底層句柄的線程上異步執行指定的委託」。因此,如果從UI線程調用它,它將被放置在一個隊列中,並在UI線程閒置時執行。這將在當前執行的方法返回後執行。 – 2009-12-24 14:42:18