[英]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.