C# 写一个程序,多线程调用函数读取一个txt文件然后不同线程通过不同的串口逐句写入末端设备
时间: 2024-10-21 19:18:13 浏览: 20
在C#中,你可以使用`System.IO.File`类来读取TXT文件,`System.Threading.Tasks`命名空间中的`Task`和`Parallel`类来实现多线程处理,以及`System.IO.Ports.SerialPort`类来操作串口通信。下面是一个简单的示例程序,展示了如何在一个多线程环境中完成这个任务:
```csharp
using System;
using System.IO;
using System.IO.Ports;
using System.Threading.Tasks;
class Program
{
private const string inputFile = "input.txt";
private static readonly SerialPort[] serialPorts = new SerialPort[] { // 根据实际串口号替换
new SerialPort("COM1"),
new SerialPort("COM2") // 如果有更多串口
};
static void Main(string[] args)
{
Task[] tasks = new Task[serialPorts.Length];
Parallel.ForEach(serialPorts, (port, index) =>
{
tasks[index] = Task.Run(() => ProcessFileAndWriteToSerial(port, inputFile, index + 1));
});
try
{
Task.WaitAll(tasks);
Console.WriteLine("所有任务已完成");
}
catch (Exception ex)
{
Console.WriteLine($"错误发生: {ex.Message}");
}
Console.ReadKey();
}
private static async void ProcessFileAndWriteToSerial(SerialPort port, string fileName, int threadNumber)
{
using StreamReader reader = File.OpenText(fileName);
string line;
while ((line = reader.ReadLine()) != null)
{
await WriteToSerialPort(port, $"Thread {threadNumber}: {line}");
}
}
private static async Task WriteToSerialPort(SerialPort port, string message)
{
try
{
await port.WriteAsync(message + Environment.NewLine); // 使用WriteAsync异步写入
}
catch (Exception ex)
{
Console.WriteLine($"写入串口失败: {ex.Message}");
}
}
}
阅读全文