一楼正解
你是写在GuidProc这个类里面的,这个是不行的.必须写在Form的类中或者子类中.就是说:this.Invoke中的this必须指的是一个窗体对象.
补充:
原因:声明的委托需要参数.
private delegate void SetTextDelegate(string value);
解决:修改代码.
if (this.InvokeRequired)
{
SetLabelText d = new SetLabelText(SetLabel1);
object arg = (object)要传入的参数值
this.Invoke(d,arg);//这里参数不对。
}
这是线程安全的问题啊,C#中默认不允许在控件的非创建线程中设置控件的值。可以使用delegate解决。
给个例子吧,比如我要在另一个线程中设置一个textbox控件的值。调用下面的SetText()就不会抱错了。
private delegate void SetTextDelegate(string value);
private void SetText(string value)
{
if (this.InvokeRequired)
{
SetTextDelegate d = new SetTextDelegate(SetText);
this.Invoke(d);
}
else
{
this.textbox.Text = value;
}
}
把this.textbox.text = value; 改成 this.label4.text = value; 就可以用上面的函数设置你的label4的text了
你的delegate估计申明有问题.
上面不就是一个例子么,我测试过的,没有问题的阿
多个线程访问同一组件是不安全的,多以需要使用委托