簡體   English   中英

我可以設置SerialPort 的DataReceived 事件發生的周期嗎?

[英]Can I set the cycle that DataReceived event occurs from SerialPort?

我有一個程序可以從SerialPort讀取和寫入十六進制 byte[] 。

我的程序在一次通信中只使用 5 個字節(五個十六進制)。

問題是 DataReceived 的出現周期是隨機的。 所以,有時它讀取 5 個字節,有時它讀取 4 位。

在此處輸入圖像描述

我總是希望 DataReceived 讀取 5 個字節。 是否可以?

下面的代碼是我寫的程序的邏輯。

serialPort.Write(sendData, 0, sendData.Length);
serialPort.DataReceived += (sender, e) =>
{
    var receiveSize = serialPort.BytesToRead;
    var buffer = new byte[receiveSize];

    serialPort.Read(buffer, 0, buffer.Length);
    this.Invoke(() =>
    {
        readRichTextBox.AppendText($"{string.Join(" ", Encoding.UTF8.GetString(buffer))}\n");
    });
};

我在創建一個空的List<byte>后解決了它。 有沒有更好的辦法?

private List<byte> bytes = new List<byte>();
serialPort.DataReceived += (sender, e) =>
{
    var receiveSize = serialPort.BytesToRead;
    var buffer = new byte[receiveSize];

    serialPort.Read(buffer, 0, buffer.Length);

    this.Invoke(() =>
    {
        foreach (var b in buffer)
        {
            bytes.Add(b);
        }

        if (bytes.Count == 10)
        {
            readRichTextBox.AppendText($"{string.Join(" ", Encoding.UTF8.GetString(bytes.ToArray()))}\n");
            bytes.Clear();
        }
    });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM