c#如何将串行输入数据放入队列中,并使用后台工作线程解除队列
本文关键字:队列 后台 工作 线程 输入 数据 | 更新日期: 2023-09-27 18:15:47
我需要从串行端口获取传入数据,将' readeexisting '字符串放入队列中,然后将que返回到用户界面。
在deque过程中,我将格式化传入字符串以删除不需要的字符,添加linefeed(传入中没有EOL字符)等,并将字符串的各个部分发送到几个控件(列表框,文本框)中以供查看。
这是到目前为止,我已经能够得到创建一个字符串(RxString)从传入的数据:
private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
我能够获得传入的数据,但是当我尝试格式化它并显示它时,一些进来的数据丢失或丢失或其他东西,文本变得不可读。如果我不格式化文本&将其直接发送到列表框中,数据都在那里,但由于所有额外的代码字符而无法使用。
我想处理(DisplayText)使用backgroundworker,以便串行数据可以进入队列,以免丢失,而backgroundworker处理将信息放在屏幕上。除非有更好的办法。
我假设数据一次出现一行,因此您总是可以使用Queue
-类并使用Enqueue
方法来添加传入的数据。
使用Dequeue
这是msdn关于Queue
类的文章的链接
的例子:
private Queue<string> data = new Queue<string>();
private void Rx_GetData(e)
{
var rxString = e.ReadExisting();
data.Enqueue(rxString);
}
private void BackgroundWorker_DoWork()
{
while(rxConn.IsConnected) // Haven't worked with serial connections, so I don't know the proper property here..
{
if(data.Count > 0)
{
var str = data.Dequeue();
FormatString(str);
}
Thread.Sleep(10);
}
}