C# Invoke用法

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




猜你喜欢

转载自www.cnblogs.com/chen1997/p/11916926.html
今日推荐