2011-06-06 39 views
0

我有一個Windows窗體,其中有一個按鈕。我有2個線程,我想從另一個線程更改按鈕名稱。我這樣做的時候會出錯。 我該如何更改按鈕名稱?從不同的線程C訪問組件#

P.S.我知道alr​​edy發佈了同樣的問題,但那裏的解決方案不能幫助我。我不能使用Dispatcher,也許是因爲我使用.NET 2.0(我必須......)。

回答

1
delegate void MyDelegate(string x); 

void ChangeName(string name) 
{ 
    if (this.InvokeRequired) 
    { 
    this.Invoke(new MyDelegate(this.ChangeName), new object[]{name}); 
    return; 
    } 
    this.button.Text = name; 
} 

這裏 How to update the GUI from another thread in C#?

+0

我this.InvokeRequired是真實的,但我仍然無法激活invoke方法的詳細信息... – aharon 2011-06-06 13:21:01

+0

的invoke再次調用GUI線程的方法。你試過這個嗎? – madmik3 2011-06-06 13:41:10

+0

在我宣佈委託後,它確實......坦克! – aharon 2011-06-06 13:44:50

0

你需要看看:

InvokeRequired and 
Invoke 

方法的實際控制權。 InvokeRequired會告訴你是否需要通過調用來完成這些工作(即從一個不是UIThread的線程調用它),並且調用將執行該操作。

它與調度程序沒有什麼不同,除了責任落在控制本身而不是其他類之外。