C# Invoke用法
2021-01-28 00:15
标签:使用 hand pre rgs 事件 class 程序 font 属性 C# Invoke用法 标签:使用 hand pre rgs 事件 class 程序 font 属性 原文地址:https://www.cnblogs.com/chen1997/p/11916926.html假如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 = ‘关闭‘;
}));
}