0

シリアル ポートからデータを読み取る C# アプリケーションがあります。タイマーで1秒ごとにデータが来るので、1秒間隔でシリアル読み取りハンドラーをタイマーに入れました。

delegate void SetTextCallback(string text);
ReceivedText(serialPort1.ReadExisting());

また、受信したデータをリッチテキストボックスに表示して、適切なデータが取得されているかどうかを確認しています。しかし、15 ~ 20 分後にアプリケーションの速度が低下し、応答さえしなくなります。

 private void ReceivedText(string text)
 {
        if (this.rtbReceived.InvokeRequired)
        {
            SetTextCallback x = new SetTextCallback(ReceivedText);
            this.Invoke(x, new object[] { (text) });
        }
        else
        {
            this.rtbReceived.Text += text;
            serialdata = text;
            if (serialdata.Length > 0 &&
                serialdata.Length < 42 &&
                serialdata.Contains("#") ||
                serialdata.StartsWith(" #"))
            {
                serialdata.Trim();
                splitdata = serialdata.Split(' ');

                try
                {
                    txtBathTemp.Text = splitdata[3];
                    txtBaroPressure.Text = splitdata[4];

                    double stemp = double.Parse(splitdata[5]);

                    txtSampleTemp.Text = (Math.Round(stemp, 2)).ToString();
                }
                catch (Exception EX)
                { 
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
4

1 に答える 1

0

this.rtbReceived.Textしばらくすると成長する可能性があります。大量のメモリを使用しなくても、常に操作するのStringは効率的ではありません。StringBuilder代わりに使用することを検討しましたか?

于 2013-06-07T08:37:47.947 に答える