2011-11-07 94 views
-1

我在C#中創建Windows應用程序,我想在多個文件中寫入多個線程。我從不同端口獲取數據,並且每個端口都有一個文件關聯。是否有可能爲每個端口創建線程並一次又一次地使用相同的線程來寫入數據到相應的文件?假設我從端口10000,10001,10002獲取數據,並且有三個文件,分別爲10000.txt,10001.txt和10002.txt。我必須創建三個線程分別將數據寫入這三個文件,並且我想一次又一次地使用這些線程。是否有可能?如果可能,請給出一小段代碼示例?如何用多個線程寫入多個文件?

+0

EXACT,字符重複的http://stackoverflow.com/q/8035029/331508,除標題。 –

回答

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

理想情況下,你希望將文件從端口閱讀寫作分開,但我會爲了簡單起見,請留給你。

+0

我不明白這是如何重用線程......你沒有循環。 – Tudor

+0

我認爲OP不需要重用線程。那是什麼用途?你也可以在一個循環中沒有線程的情況下執行它。 – CodeCaster

+0

是的,你可以,但是你需要使用select。如果線程很少,這是解決問題的直觀方法。 – Tudor

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