C# 写一个程序,多线程调用函数读取同一个txt文件然后不同线程通过不同的串口逐句写入末端设备
时间: 2024-10-21 13:18:11 浏览: 24
在C#中,我们可以创建一个多线程程序,使用`StreamReader`读取文本文件,并利用`Thread`和`SerialPort`将内容分发到不同的串口设备上。以下是一个简单的示例:
```csharp
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.IO.Ports;
class Program
{
static string[] linesFromFile = new string[0]; // 存储文件行的内容
static void Main(string[] args)
{
// 文件路径和串口配置
string filePath = "path_to_your_text_file.txt";
SerialPort[] serialPorts = GetAvailableSerialPorts(); // 获取可用串口
if (serialPorts.Length > 0)
{
// 读取文件线程
Task.Run(() => ReadFileAndFillLines(filePath));
for (int i = 0; i < serialPorts.Length; i++)
{
// 分配任务给每个串口线程
Task.Run(() => WriteToSerialPort(linesFromFile[i % linesFromFile.Length], serialPorts[i]));
}
// 等待所有任务完成
Task.WaitAll();
}
else
{
Console.WriteLine("No available serial ports found.");
}
}
static string[] GetAvailableSerialPorts()
{
return SerialPort.GetComPortNames();
}
static async Task ReadFileAndFillLines(string filePath)
{
try
{
using StreamReader reader = new StreamReader(filePath);
while (!reader.EndOfStream)
{
linesFromFile.Add(reader.ReadLine());
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading file: {ex.Message}");
}
}
static async Task WriteToSerialPort(string line, SerialPort serialPort)
{
try
{
await serialPort.WriteAsync(line + Environment.NewLine); // 每行后面加换行符
}
catch (Exception ex)
{
Console.WriteLine($"Error writing to serial port: {serialPort.Name} - {ex.Message}");
}
}
}
阅读全文