C# 使用队列 多线程 缓存串口接收数据 同时处理接收后的数据 简单示例代码
时间: 2024-12-11 22:32:55 浏览: 18

C#多线程处理多个队列数据的方法
在C#中,可以使用`Queue<T>`来存储串口接收到的数据,并使用多线程来处理这些数据。以下是一个简单的示例代码,展示了如何使用队列和多线程来缓存和处理串口接收的数据:
```csharp
using System;
using System.Collections.Concurrent;
using System.IO.Ports;
using System.Threading;
class Program
{
static SerialPort serialPort;
static ConcurrentQueue<string> dataQueue = new ConcurrentQueue<string>();
static bool keepRunning = true;
static void Main(string[] args)
{
// 初始化串口
serialPort = new SerialPort("COM1", 9600);
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
serialPort.Open();
// 启动数据处理线程
Thread processThread = new Thread(ProcessData);
processThread.Start();
Console.WriteLine("按任意键退出...");
Console.ReadKey();
// 停止线程和串口
keepRunning = false;
processThread.Join();
serialPort.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
string data = serialPort.ReadExisting();
dataQueue.Enqueue(data);
}
private static void ProcessData()
{
while (keepRunning)
{
if (dataQueue.TryDequeue(out string data))
{
// 处理接收到的数据
Console.WriteLine("处理数据: " + data);
}
else
{
// 如果没有数据,稍作等待
Thread.Sleep(100);
}
}
}
}
```
在这个示例中,我们首先创建了一个`SerialPort`对象来打开并配置串口。当串口接收到数据时,会触发`DataReceived`事件,该事件的处理函数`DataReceivedHandler`将接收到的数据添加到一个线程安全的`ConcurrentQueue<string>`队列中。
然后,我们创建了一个单独的线程来运行`ProcessData`方法,该方法从队列中取出数据并进行处理。如果队列为空,则线程会暂停一小段时间(100毫秒),以避免过度占用CPU资源。
最后,主线程等待用户输入以结束程序,关闭串口并停止数据处理线程。
阅读全文
相关推荐
















