System.Reflection.TargetInvocationException在mscorlib.dll中未处理

时间:2015-09-29 20:39:24

标签: c# wpf

我正在尝试从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;
    }

0 个答案:

没有答案