[英]How to use SerialPort in .Net by using DataReceived event?
您可以使用窗體上的IsInvokeRequired和BeginInvoke方法將控件切換回UI線程。
在某些情況下,我還使用計時器來監視某些共享數據結構中的更改,例如消息列表。 但是當你從一些后台線程得到一個非常穩定的消息流時,這種方法效果最好。
此代碼假定您已添加了一個表單級SerialPort
對象,其port_DataReceived
方法附加到其DataReceived
事件,並且您在表單上有一個名為label1
的標簽。
我不是100%肯定將端口中可用字節轉換為字符串的代碼,因為我沒有使用實時串行端口收集數據來運行它。 但是,無論事件是否在不同的線程上,此代碼都允許您顯示接收的數據。
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = (SerialPort)sender;
byte[] buffer = new byte[port.BytesToRead];
port.Read(buffer, 0, buffer.Length);
string data = UnicodeEncoding.ASCII.GetString(buffer);
if (label1.InvokeRequired)
{
Invoke(new EventHandler(DisplayData), data, EventArgs.Empty);
}
else
{
DisplayData(data, EventArgs.Empty);
}
}
private void DisplayData(object sender, EventArgs e)
{
string data = (string)sender;
label1.Text = data;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.