Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
782 of 1492 menu
◀ ▶

Метод Dispose

Stream.Dispose закрывает поток. Конструкция using вызывает Dispose при выходе из блока. После закрытия чтение бросает ObjectDisposedException. Сброс буфера перед закрытием - Flush. У асинхронного API есть DisposeAsync.

Синтаксис

stream.Dispose(); using (Stream stream = new MemoryStream()) { }

Пример

Давайте закроем поток вручную через Dispose:

using System; using System.IO; class Program { static void Main() { var ms = new MemoryStream(); ms.Write([1, 2, 3, 4, 5], 0, 5); ms.Dispose(); bool res = ms.CanRead; Console.WriteLine(res); } }

Результат выполнения кода:

False

Пример

Давайте поймаем ObjectDisposedException при чтении после закрытия:

using System; using System.IO; class Program { static void Main() { var ms = new MemoryStream(); ms.Write([1, 2, 3, 4, 5], 0, 5); ms.Dispose(); byte[] buf = new byte[1]; try { ms.Read(buf, 0, 1); } catch (ObjectDisposedException) { Console.WriteLine("fail"); } } }

Результат выполнения кода:

"fail"

Пример

Давайте убедимся, что using тоже закрывает поток:

using System; using System.IO; class Program { static void Main() { MemoryStream ms; using (ms = new MemoryStream()) { ms.Write([1, 2, 3, 4, 5], 0, 5); } bool res = ms.CanRead; Console.WriteLine(res); } }

Результат выполнения кода:

False

Смотрите также

  • метод Flush,
    который сбрасывает буфер перед закрытием
  • метод Read,
    который после закрытия недоступен
  • свойство CanRead,
    которое становится false
  • File.Open,
    который возвращает поток, его нужно закрывать
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить