gpt4 book ai didi

c# - StreamWriter 什么时候被释放?

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:57 29 4
gpt4 key购买 nike

我组织了一个小类来实现一个快速记录器。我用一个在构造函数中实例化的私有(private) System.IO.StreamWriter 组成它。因为我使用的方式阻止我实现 using block ,所以我添加了一个终结器并在其中调用了 StreamWriter 的 Dispose() 方法。但是,在执行时,终结器会抛出异常,因为 StreamWriter 已被释放。

System.ObjectDisposedException - Cannot access a closed file.

我很困惑这是怎么发生的,我想知道这是否意味着我不需要担心清理 StreamWriter。这是我的类(class):

public class TextFileLogger : AbstractTextLogger
{
private const string LogPath = @"C:\";
private const string LogFileName = "MyFile.log.txt";
private readonly StreamWriter _writer;

public TextFileLogger()
{
_writer = new StreamWriter($"{LogPath}{LogFileName}", true);
_writer.AutoFlush = true;
}

~TextFileLogger()
{
_writer.Dispose();
}

protected override void WriteLine(string line)
{
_writer.WriteLine(line);
}
}

最佳答案

在终结器中唯一允许访问的是根对象(如静态变量)或派生自 CriticalFinalizerObject 的对象。

问题是终结器不是确定性的,它可以按照感觉的任何顺序运行。你遇到的问题是因为文本编写器在你上课之前就完成了。

您需要要么“抱最好的希望”,让编写器的终结器完成工作,要么您需要重构您的代码,以便您的类本身是可处理的,并调用流编写器的处理方法。

关于c# - StreamWriter 什么时候被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419619/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com