如何在多个线程的多个文件中写入

本文关键字:文件 线程 | 更新日期: 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);
});