system.reflection.targetparametercountexception参数计数不匹配参数计数不匹配

时间:2013-10-17 11:57:43

标签: c# multithreading winforms invoke

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

        }

2 个答案:

答案 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
    {

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