Когда умирает StreamWriter ? - C#
Формулировка задачи:
Есть класс:
Если я принудительно не вызываю метод Dispose(), то возникает эксепшн в месте закрытия потока. Резонный вопрос - а кто же закрывает его до меня? При этом файл лога fout пустой. Записи там появляются только если методе Flush() принудительно вызвать fout.Flush().
public class yLogFile : IDisposable
{
private StreamWriter fout;
private string buffer;
private bool Disposed = false;
public yLogFile(string fname)
{
fout = new StreamWriter(fname, true, Encoding.UTF8);
buffer = "------------- Log Begin -------------";
Flush();
}
~yLogFile()
{
Dispose();
}
public void WriteToLog(string msg)
{
//действия по записи в лог-файл
}
private void Flush()
{
fout.WriteLine(buffer);
buffer = "";
}
public void Dispose()
{
if (!Disposed)
{
buffer = "------------- Log End -------------";
Flush();
// эксепшн тут
fout.Close();
Disposed = true;
}
}
}Решение задачи: «Когда умирает StreamWriter ?»
textual
Листинг программы
sealed class yLogFile
{
// ...
~yLogFile()
{
Dispose(false);
}
public void Dispose()
{
}
private void Dispose(bool disposing)
{
if (disposing)
{
// Dispose() ...
GC.SuppressFinalize(this);
}
else
{
// Финализатор ...
}
}
// ...
}