2012-04-12 77 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获得),并让后台线程处理所有日志写入。如果你使用互斥锁并锁定,它会打你的表现。在内存队列中写入比写文件要快得多。