Когда умирает StreamWriter ? - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс:
Листинг программы
  1. public class yLogFile : IDisposable
  2. {
  3. private StreamWriter fout;
  4. private string buffer;
  5. private bool Disposed = false;
  6. public yLogFile(string fname)
  7. {
  8. fout = new StreamWriter(fname, true, Encoding.UTF8);
  9. buffer = "------------- Log Begin -------------";
  10. Flush();
  11. }
  12. ~yLogFile()
  13. {
  14. Dispose();
  15. }
  16. public void WriteToLog(string msg)
  17. {
  18. //действия по записи в лог-файл
  19. }
  20. private void Flush()
  21. {
  22. fout.WriteLine(buffer);
  23. buffer = "";
  24. }
  25. public void Dispose()
  26. {
  27. if (!Disposed)
  28. {
  29. buffer = "------------- Log End -------------";
  30. Flush();
  31. // эксепшн тут
  32. fout.Close();
  33. Disposed = true;
  34. }
  35. }
  36. }
Если я принудительно не вызываю метод Dispose(), то возникает эксепшн в месте закрытия потока. Резонный вопрос - а кто же закрывает его до меня? При этом файл лога fout пустой. Записи там появляются только если методе Flush() принудительно вызвать fout.Flush().

Решение задачи: «Когда умирает StreamWriter ?»

textual
Листинг программы
  1. sealed class yLogFile
  2. {
  3.     // ...
  4.  
  5.     ~yLogFile()
  6.     {
  7.         Dispose(false);
  8.     }
  9.  
  10.     public void Dispose()
  11.     {
  12.     }
  13.  
  14.     private void Dispose(bool disposing)
  15.     {
  16.         if (disposing)
  17.         {
  18.             // Dispose() ...
  19.             GC.SuppressFinalize(this);
  20.         }
  21.         else
  22.         {
  23.             // Финализатор ...
  24.         }
  25.     }
  26.  
  27.     // ...
  28. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы