如何在多个线程的多个文件中写入
本文关键字:文件 线程 | 更新日期: 2023-09-27 18:13:56
我正在c#中创建windows应用程序,我想在多个线程的多个文件中编写。我从不同的端口得到数据,有一个文件与每个端口相关联。是否有可能为每个端口创建线程,并一次又一次地使用相同的线程将数据写入各自的文件?假设我从端口10000、10001、10002获取数据,并且有三个文件分别为1000 .txt、10001.txt和10002.txt。我必须创建三个线程分别写入数据到这三个文件,我想一次又一次地使用这些线程。这可能吗?如果可能的话,你能给一个小的代码样本吗?
如果你让每个线程处理自己的文件,它会做什么?
因此,当创建端口读取器线程时,打开属于该端口的文件,并存储该文件的句柄。无论何时接收到数据,都将其写入文件:
class PortReader
{
StreamWriter _writer;
int _port;
YourPort _myPort;
public PortReader(int port)
{
// Do your port initialization stuff
_writer = new StreamWriter(port + ".txt");
}
private void DataReceived(String data)
{
_writer.WriteLine(data);
}
public void StartReading()
{
while (_myPort.Connected)
{
// Do your port reading stuff
String data = _myPort.ReadData();
// Do some processing with the data
// And now let it be written to the file
DataReceived(data);
}
}
}
然后像这样开始:
List<PortReader> readerList = new List<PortReader>();
readerList.Add(new PortReader(10000));
readerList.Add(new PortReader(10001));
readerList.Add(new PortReader(10002));
// etc...
foreach (PortReader reader in readerList)
{
new Thread(new ThreadStart(reader.StartReading)).Start();
}
理想情况下,您希望将文件写入与端口读取分开,但为了简单起见,我将把这个问题留给您。
var ports = new List<int> { 1000, 1001, 1002 };
Parallel.ForEach(ports, p =>
{
var data = GetDataForPort(p);
var path = string.Format(@"C:'{0}.txt", p);
using (var writer = new StreamWriter(path))
writer.Write(data);
});