凡是异步线程,thread delegate task event,都需要使用invoke调用UI的控件。
Interaction是一个委托函数,必须要声明。因为Invoke方法需要创建一个委托。
private delegate void Interaction();//自定义的委托
this.Invoke((Interaction)delegate
{
});
或者:
this.Invoke(new EventHandler(delegate//自带,不带参数委托
{
}));
或者;
this.Invoke((EventHandler)delegate
{
});
或者;
this.Invoke(new MethodInvoker(delegate//自带,可带参数委托
{
}));
或者:
this.Invoke(new Action(()=>//还包括Func等等
{
}));
使用非匿名方法时,需要从线程与主线程之间传递参数,因此需要设置有参数委托。
delegate void setUIControlValueDelegate(string text1);
public void threadTimer1Method(object state)
{
string text1 = "abcd";
setUIControlValueDelegate d = new setUIControlValueDelegate(setUIControlValue);
this.Invoke(d, new object[] { text1 });
}
private void setUIControlValue(string text1)
{
label1.Text = text1;
}