Когда умирает 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 { // Финализатор ... } } // ... }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д