C# 流编写器调用
本文关键字:调用 | 更新日期: 2023-09-27 18:31:02
我想在跨线程中访问并写入 txt 文件,但软件给出了一个例外,因为多个线程想要同时访问同一个文件。如何调用流编写器以避免异常?这是我的代码:
void WriteLog(string LogStr)
{
StreamWriter sw = new StreamWriter("Log.txt", true);
sw.WriteLine(LogStr);
sw.Close();
}
我在线程中调用 WriteLog 方法。
谢谢。
您可以尝试使用互斥体:
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();
}
}
我认为如果您不想等待日志(听起来只是合乎逻辑的),您应该将日志消息推送到同步队列(可从 .net 4 获得)并让后台线程处理所有日志写入。如果您使用互斥锁和锁,则会影响您的性能。在内存中,队列写入比文件写入快得多。
使用 Mutex
类:
Mutex mut = new Mutex();