0

我正在尝试使用不同的线程更新 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;
            }

        }
4

2 回答 2

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 });

我希望这会有所帮助。

于 2014-01-07T13:36:30.170 回答
0

尝试将函数的顶部更改为以下内容:

private void Set_status(string text, string Qmgr)
{
    if (this.Status1A.InvokeRequired)
    {
        this.Invoke((Action)(() => Set_status(text, Qmgr)));
    }
    else
    {

这样您就不需要委托声明等。

于 2013-10-17T12:32:10.870 回答