假如winform構建GUI界面時,如果要在控件事件中響應函數中改變控件的屬性,例如:某個按鈕上的文本原先叫“打開”,單擊之后按鈕上的文本顯示“關閉”,初學者往往會想當然地這么寫:
void ButtonOnClick(object sender,EventArgs e)
{
button.Text="關閉";
}
這樣的寫法運行程序之后,可能會觸發異常,異常信息大致是“不能從不是創建該控件的線程調用它”。
我們可以使用兩種方法去解決這個問題
this這種(Invoke方法需要創建一個委托。你可以事先寫好函數和與之對應的委托)
1.使用委托的方式
void ButtonOnClick(object sender,EventArgs e)
{
this.Invoke(new EventHandler(delegate{
button.Text = '關閉';
}));
}
2.C#3.0以后有了Lamda表達式,使用以下這種方法
void ButtonOnClick(object sender,EventArgs e)
{
this.Invoke(new Action()) =>
{
button.Text = '關閉';
}));
}