2012-04-12 79 views
0

我想在跨線程中寫入一個txt文件,但是軟件會發出異常,因爲多個線程想要同時到達同一個文件。我如何調用Streamwriter以避免異常?這裏是我的代碼:C#streamwriter invoke

void WriteLog(string LogStr) 
{ 
    StreamWriter sw = new StreamWriter("Log.txt", true); 
    sw.WriteLine(LogStr); 
    sw.Close(); 
} 

我在線程中調用WriteLog方法。

謝謝。

+2

是否使用類似NLog或log4net之類的東西?這將爲你解決這個問題,因爲他們處理所有這些複雜性。另外,每次你想記錄信息時打開和關閉一個文件將會給你帶來很大的麻煩。 – yamen 2012-04-12 07:15:38

回答

2

你可以嘗試使用互斥:

private Mutex mut = new Mutex(); // Somewhere in mail class 
void WriteLog(string LogStr) 
{ 
    mut.WaitOne(); 
    try 
    { 
     using(StreamWriter sw = new StreamWriter("Log.txt", true)) 
      sw.WriteLine(LogStr); 
    } 
    finally 
    { 
     mut.ReleaseMutex(); 
    } 
} 
0

使用Mutex類:

Mutex mut = new Mutex(); 
+1

如果你不顯示OP如何使用它,它似乎是無用的... – Marco 2012-04-12 07:18:24

0

我認爲,如果你不想等待日誌(只響邏輯),你應該只需將日誌消息推送到同步隊列(可從.net 4獲得),並讓後臺線程處理所有日誌寫入。如果你使用互斥鎖並鎖定,它會打你的表現。在內存隊列中寫入比寫文件要快得多。