我正在尝试从DMM读取串行数据,我认为数据偶尔会被破坏。大约95%的时间我可以读取数据并将其显示到textBox中,但很偶然,我得到了这个错误:
System.Reflection.TargetInvocationException在mscorlib.dll中未处理。
InnerException是:Message =输入字符串的格式不正确。
我是Windows WPF和C#编程的新手,但我认为这意味着收到的数据没有正确终止。
这是我的Receive()代码:
private delegate void UpdateUiTextDelegate(string text);
private void Recieve(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// Collecting the characters received to our 'buffer' (string).
received_data = serial.ReadLine();
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(WriteData), received_data);
}
处理损坏数据的正确方法是什么?
更新:这是我的writeData():
private void WriteData(string text)
{
string myTextStripped;
string avgText;
string textChar;
string currentFilteredText;
double current;
double difference;
int range;
textBox2.Text = myText; // display raw string data
myTextStripped = text.Substring(1, 7); // remove chars after 7th char
myTextStrippedTextBox.Text = myTextStripped; // display trimmed string
if (myTextStripped[5] == '2') // range 0 - 59.9 mV
{
range = 1;
myTextStripped = myText.Remove(4); // keep first 4 chars
current = float.Parse(myTextStripped);
current = current / 100;
myTextStrippedTextBox.Background = Brushes.Yellow;
}
else if (myTextStripped[5] == '3') // range is 60mV - 600mV
{
range = 2;
myTextStripped = myText.Remove(4); // keep first 4 chars
current = float.Parse(myTextStripped);
current = current / 10;
myTextStrippedTextBox.Background = Brushes.YellowGreen;
}
else // range is 600mv+
{
range = 3;
myTextStripped = myText.Remove(4); // keep first 4 chars
current = float.Parse(myTextStripped);
myTextStrippedTextBox.Background = Brushes.PaleVioletRed;
}
// Filter results because readings jump too much to visually determine a good value
difference = (current - currentFiltered);
currentFiltered = currentFiltered + (filterFactor * difference);
avgText = currentFiltered.ToString(".000");
avgText = avgText.TrimStart('0');
currentTextBox.Text = avgText;
}