簡體   English   中英

C#-如何在無限長的時間內從SerialPort讀取

[英]C# - How to read from a SerialPort for an infinite amount of time

我有一個連接到串行端口的arduino,它始終生成從0到64的數字。

我想用c#讀取這些信號,並設法將它們附加到Richtextbox。 不幸的是,在某些時候它們不再寫在框中,我不得不再次打開端口以將文本再次添加到框中。

這是代碼示例:

private void btnOpenPort_Click(object sender, EventArgs e)

    {
        if (Arduino.IsOpen == false)
        {   
            Arduino.BaudRate = 115200;
            Arduino.PortName = cBPortWaehlen.SelectedItem.ToString();
            Arduino.Open();

        }
        while (Arduino.BytesToRead != 0) 
        {
           richTextBox1.AppendText(Arduino.ReadExisting());
        }
    }

只要我的arduino發送信號,我就認為Arduino.BytesToRead語句永遠不會出錯,但是事實並非如此。 我該如何實現呢?

首先,關於在C#中進行的任何串行連接都有一個默認的事件處理程序,稱為DataReceived 我相信您可以使用它,並刪除在那里的while代碼塊。

其次,我認為while塊的操作過於密集,因此,如果您Thread.Sleep(1000)我的第一個建議,請嘗試將Thread.Sleep(1000)放入while內,這樣它就不會執行太多次。 如果要每隔幾毫秒刷新一次數據,請通過提供所需的毫秒數來替換Thread.Sleep(1000)

希望這回答了您的問題。

以后編輯:

您可以擁有的代碼如下所示:

public void OpenArduinoConnection()
 {
     if(!arduinoBoard.IsOpen)
     {
         arduinoBoard.DataReceived += arduinoBoard_DataReceived;
         arduinoBoard.PortName = "yourportname";
         arduinoBoard.Open();
      }
      else
      {
         throw new InvalidOperationException("The Serial Port is already open!");
      }
 } 

void arduinoBoard_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   // your code here
}

暫無
暫無

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

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