我正在尝试使用不同的线程更新UI并使用以下过程来执行此操作。但是在调用期间收到上述错误。请允许这是不允许的。
delegate void SetLabelCallback(string text,string Qmgr);
private void Set_status(string text, string Qmgr)
{
if (this.Status1A.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(record_count);
this.Invoke(d, new object[] { text,Qmgr });
}
else
{
switch (Qmgr)
{
case "GCSSPR1A": this.Status1A.Text = text;
break;
case "GCSSPR1B": this.B1_Status.Text = text;
break;
case "GCSSPR2A": this.A2_Status.Text = text;
break;
case "GCSSPR2B": this.B2_Status.Text = text;
break;
case "GCSSPR3A": this.A3_Status.Text = text;
break;
case "GCSSPR3B": this.B3_Status.Text = text;
break;
}
}
答案 0 :(得分:1)
我也会像Baldrick那样做。
他正在使用lambda表达式,也许你会使用类似这样的东西
private void Set_status(string text, string Qmgr)
{
if (this.InvokeRequired)
{
this.Invoke(new ReceivedEventHandler(Set_status), new Object[] {text, Qmgr});
}
else
{
}
}
但是,我认为这不是问题。
我之前收到此问题时,委托处理程序/函数调用中的参数数量与Invoke声明中定义的对象数量不匹配。
this.Invoke(d, new object[] { text, Qmgr, something_missing });
我希望有所帮助。
答案 1 :(得分:0)
尝试将函数顶部更改为以下内容:
private void Set_status(string text, string Qmgr)
{
if (this.Status1A.InvokeRequired)
{
this.Invoke((Action)(() => Set_status(text, Qmgr)));
}
else
{
这样你就不需要委托声明等等。