17

次のコードセグメントで問題が発生しています。パラメータカウントの不一致が発生しています。

複数のスレッドと安全でない更新の問題のために、これを書かなければなりませんでした。


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

        string[] tokens = data.Split(':');
        if (tokens[0] == "$SENSOR")
        {
            if (label_sensorValue.InvokeRequired)
            {
                data_INPUTDelegate del = new data_INPUTDelegate(data_INPUT);
                label_sensorValue.Invoke(del,new object[] {tokens[1]});
            }
            else
            {
                label_sensorValue.Text = tokens[1];
            }
        }
    }
4

2 に答える 2

17

エラーは次の行から来ていると思います:

label_sensorValue.Invoke(del,new object[] {tokens[1]});

del(tokens[1])に渡すパラメーターは1つだけですが、パラメーターは2つ(senderとe)です。

SetSensorValue編集:コードを注意深く読んだ後、の値を設定するメソッドを作成することをお勧めしますlabel_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;
    }
}
于 2009-10-28T11:23:15.497 に答える
5

問題は、1つのパラメーターのみを使用して2つのパラメーターのデリゲートを呼び出していることです。

次の行

label_sensorValue.Invoke(del,new object[] {tokens[1]});

パラメータを使用してUIスレッドでデリゲートを呼び出しますtokens[1]

デリゲートには2つのパラメーターが必要なため、失敗します。さらに、デリゲートは文字列ではなく、objectとを期待SerialDataReceivedEventArgsします。

これを修正するには、デリゲートの代わりに匿名メソッドを呼び出す必要があります。

例(C#3の場合):

label_sensorValue.Invoke(new Action(() => label_sensorValue.Text = tokens[1]));
于 2009-10-28T11:27:57.867 に答える