Предоставление некоторого фона, чтобы добавить к правильному ответу DeCaf.GDI + очень старается избежать копирования пикселей растрового изображения.Это дорого, растровые изображения, занимающие десятки мегабайт, не являются чем-то необычным.Когда вы загружаете растровое изображение из файла с помощью конструктора Bitmap или Image.FromFile (), тогда GDI + создает файл с отображением в памяти.Пиксели вставляются по требованию, только при необходимости.Очень эффективно, но это ставит блокировку на файл.Ясно, что вы пытались избежать этой блокировки в этом коде.
Вы действительно избегаете этой блокировки, загружая байты в память самостоятельно с помощью MemoryStream.Но тот же принцип все еще применяется, GDI + все еще не копирует пиксели и читает только из потока, когда это необходимо.Это идет не так, когда вы Dispose () поток.Очень трудно диагностировать, потому что исключение возникает позже , обычно, когда нужно нарисовать растровое изображение.Это бомба в коде рисования, у вас нет кода для просмотра, кроме Application.Run ().С дрянным сообщением об исключении, GDI + имеет только несколько кодов ошибок.У вас нет нехватки памяти, это выглядит так только в GDI +, иначе невозможно понять, почему поток внезапно перестает читаться.
По крайней мере, часть проблемы вызванаочень неудобной реализацией MemoryStream.Dispose ().Dispose предназначен для освобождения неуправляемых ресурсов.Поток памяти не имеет, он только владеет памятью.Об этом уже позаботится сборщик мусора.К сожалению, они все равно это реализовали.Не путем утилизации чего-либо, поскольку нечего утилизировать, а путем пометки MemoryStream как нечитаемогоЧто вызывает ошибку в GDI +, когда он пытается читать при рисовании растрового изображения.
Поэтому просто удалите оператор , используя , чтобы избежать использования MemoryStream для решения вашей проблемы.И не беспокойтесь о его утилизации позже, когда растровое изображение больше не используется.Утилизировать нечего, сборщик мусора автоматически освобождает память.