如何用多个线程写入多个文件?

时间:2011-11-07 14:35:41

标签: c# multithreading file-io

我在C#中创建Windows应用程序,我想在多个文件中写入多个线程。我从不同的端口获取数据,并且每个端口都有一个文件。是否可能为每个端口创建线程端口并一次又一次地使用相同的线程将数据写入相应的文件?假设我从端口10000,10001,10002获取数据,并且有三个文件,如10000.txt,10001.txt和10002.txt。我必须分别创建三个线程来将数据写入这三个文件,我想一次又一次地使用这些线程。这有可能吗?如果可能的话,你能给出一小段代码吗?

2 个答案:

答案 0 :(得分:2)

如果让每个线程处理自己的文件,它会做什么?

因此,当创建端口阅读器线程时,您打开属于该端口的文件,并将句柄存储到该文件。每当您收到数据时,都会将其写入文件:

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();
}

理想情况下,您希望将文件写入与端口读取分开,但为了简单起见,我会将其留给您。

答案 1 :(得分:1)

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);
});