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





免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM