我在C#中创建Windows应用程序,我想在多个文件中写入多个线程。我从不同端口获取数据,并且每个端口都有一个文件关联。是否有可能为每个端口创建线程并一次又一次地使用相同的线程来写入数据到相应的文件?假设我从端口10000,10001,10002获取数据,并且有三个文件,分别为10000.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();
}
理想情况下,你希望将文件从端口阅读写作分开,但我会为了简单起见,请留给你。
我不明白这是如何重用线程......你没有循环。 – Tudor
我认为OP不需要重用线程。那是什么用途?你也可以在一个循环中没有线程的情况下执行它。 – CodeCaster
是的,你可以,但是你需要使用select。如果线程很少,这是解决问题的直观方法。 – Tudor
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);
});
- 1. 如何使用多个线程写入单个文件?
- 2. 多个文件写入线程
- 3. 多线程,读取多个文件并写入新文件
- 4. 使用多个线程写入单个文件
- 5. 如何在多个线程中写入文件
- 6. 如何使用多线程在python中一次更新/写入多个文件?
- 7. Java从多个线程并发写入单个文本文件?
- 8. 从ruby中的多个线程写入单个文件
- 9. 多线程写入文本文件
- 10. 从多个线程写入文本文件?
- 11. 写入多个文件
- 12. 写入多个NCDF4文件
- 13. Log4Net从多个进程写入文件
- 14. 在多线程中写入文件
- 15. 线程安全多文件写入
- 16. Java/Scala多线程文件写入
- 17. 多线程文件写入行为
- 18. 多线程写入字节[]到文件
- 19. 多个线程写入阵列
- 20. 从多个线程写入TraceListener
- 21. 如何使用python将多个输入写入文本文件?
- 22. 从多个线程写入不同文件后获取ferror()
- 23. java多线程(newCachedThreadPool),然后将结果写入一个文件?
- 24. Java - 写入同一文件的多个线程
- 25. 多线程写入单个文件的最有效方法C
- 26. 多个线程可以同时将数据写入文件吗?
- 27. 读取多个文件并写入多个输出文件
- 28. 多个RollingFileAppenders写入同一个文件
- 29. 用Scrapy写入多个文件
- 30. 如何在多线程概念的spring批处理中写入单个文件
EXACT,字符重复的http://stackoverflow.com/q/8035029/331508,除标题。 –