문제

다음 코드 세그먼트에 문제가 있습니다. 매개 변수 카운트 불일치를 받고 있습니다.

여러 스레드와 안전하지 않은 업데이트의 문제로 인해 이것을 써야했습니다.


       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];
            }
        }
    }
도움이 되었습니까?

해결책

오류 가이 줄에서 나온 것 같아요.

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

하나의 매개 변수 만 DEL에 전달합니다 (tokens[1])하지만 두 개의 매개 변수가 있습니다 (발신자 및 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;
    }
}

다른 팁

문제는 하나의 매개 변수만으로 2 파라미터 대의원을 호출한다는 것입니다.

다음 줄

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

매개 변수로 UI 스레드에서 대의원을 호출합니다. tokens[1].

대의원은 두 개의 매개 변수가 필요하므로 실패합니다. 또한 대표는 an을 기대합니다 object 그리고 a SerialDataReceivedEventArgs, 문자열이 아닙니다.

이 문제를 해결하려면 대의원 대신 익명 방법을 호출해야합니다.

예를 들어 (C# 3) :

label_sensorValue.Invoke(new Action(() => label_sensorValue.Text = tokens[1]));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top