문제
다음 코드 세그먼트에 문제가 있습니다. 매개 변수 카운트 불일치를 받고 있습니다.
여러 스레드와 안전하지 않은 업데이트의 문제로 인해 이것을 써야했습니다.
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]));
제휴하지 않습니다 StackOverflow