首页 文章

'The process cannot access the file ' logs \ dashboard.log ' because it is being used by another process.'在多任务环境中

提问于
浏览
-2

我有以下变量:

private readonly object fileLock = new object ();

用于以下功能:

public void LogRaw (string message)
{
    lock (fileLock)
    {
        using (StreamWriter streamWriter = new StreamWriter (Filename, true))
        {
            streamWriter.Write (message);
            streamWriter.Flush ();
            streamWriter.Close ();
            streamWriter.Dispose ();
        }
    }
}

此函数由同时执行的不同任务调用 . 我不明白为什么一段时间后我收到这个例外:

System.IO.IOException:'进程无法访问文件'logs \ dashboard.log',因为它正由另一个进程使用 .

因为我使用 lock 关键字,因为在函数内部我关闭并处理 streamWriter .

在此先感谢您的帮助 .

编辑:只是为了澄清,这是一个具有多个任务的单个应用程序,因此有多个线程,但应用程序是一个,我没有运行同一个应用程序的多个实例 . 此外,Logger类仅实例化一次,并由需要它的各种任务重用(可能像单例) .

1 回答

  • 0

    最后我发现是OneDrive故障 . 我暂停了它并运行了大约10分钟的应用程序并且没有收到任何异常(在最长1分钟之后发生之前) . 一旦我恢复OneDrive(应用程序运行),在5或6秒后我得到了异常 . 我没有想到OneDrive,因为我认为它是为处理这种情况而建的,但可能不是 .

相关问题