C# 参数计数不匹配

C# 参数计数不匹配,c#,count,parameters,mismatch,C#,Count,Parameters,Mismatch,以下代码段有问题。我得到一个参数计数不匹配 由于多线程和不安全更新的问题,我不得不写这篇文章 我猜错误来自这一行: label_sensorValue.Invoke(del,new object[] {tokens[1]}); 您只将一个参数传递给del(tokens[1]),但它有两个参数(sender和e) 编辑:仔细阅读代码后,我建议您创建一个SetSensorValue方法来设置label\u sensorValue的值。现在,您正试图使用错误的参数调用事件处理程序 private

以下代码段有问题。我得到一个参数计数不匹配

由于多线程和不安全更新的问题,我不得不写这篇文章



我猜错误来自这一行:

label_sensorValue.Invoke(del,new object[] {tokens[1]});
您只将一个参数传递给del(
tokens[1]
),但它有两个参数(sender和e)

编辑:仔细阅读代码后,我建议您创建一个
SetSensorValue
方法来设置
label\u sensorValue
的值。现在,您正试图使用错误的参数调用事件处理程序

private void data_INPUT(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string data = serialPort.ReadLine();

    string[] tokens = data.Split(':');
    if (tokens[0] == "$SENSOR")
    {
        SetSensorValue(tokens[1]);
    }
}

delegate void SetSensorValueDelegate(string value);

private void SetSensorValue(string value)
{
    if (label_sensorValue.InvokeRequired)
    {
        SetSensorValueDelegate del = new SetSensorValueDelegate(SetSensorValue);
        label_sensorValue.Invoke(del, new object[] {value});
    }
    else
    {
        label_sensorValue.Text = value;
    }
}

您的问题是,您调用的是一个只有一个参数的双参数委托

下一行

label_sensorValue.Invoke(del,new object[] {tokens[1]});
使用参数
tokens[1]
在UI线程上调用委托

因为委托需要两个参数,所以它失败了。此外,代理需要的是
对象
SerialDataReceivedEventArgs
,而不是字符串

要解决这个问题,您应该调用匿名方法而不是委托

例如(在C#3中):

错误(根据C#调试器)是由以下行引起的:label#u sensorValue.Invoke(del,new object[]{tokens[1]});
label_sensorValue.Invoke(del,new object[] {tokens[1]});
label_sensorValue.Invoke(new Action(() => label_sensorValue.Text = tokens[1]));