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 方法。

谢谢。

C# 流编写器调用

您可以尝试使用互斥体:

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