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处理将信息放在屏幕上。除非有更好的办法。

c#如何将串行输入数据放入队列中,并使用后台工作线程解除队列

我假设数据一次出现一行,因此您总是可以使用Queue -类并使用Enqueue方法来添加传入的数据。

使用Dequeue

从backgroundworker获取项目

这是msdn关于Queue类的文章的链接

http://msdn.microsoft.com/en-us/library/7977ey2c.aspx

的例子:

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);
    }
}