假如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 = ‘关闭‘;
}));
}