Загрузка изображения из потока без сохранения потока открытым

Можно ли использовать метод FromStream объекта System.Drawing.Image без необходимости держать поток открытым на протяжении всего времени существования изображения?

У меня есть приложение, которое загружает набор графических элементов панели инструментов из файлов ресурсов, используя комбинацию Image.FromStream и Assembly.GetManifestResourceStream .

Проблема, с которой я сталкиваюсь, заключается в том, что это работает отлично в Windows 7, в Windows XP приложение вылетает, если элемент пользовательского интерфейса, связанный с одним из этих изображений, отключен. В Windows 7 изображение отображается в оттенках серого. В XP происходит сбой из-за исключения нехватки памяти.

После загрузки волос я, наконец, отследил это до начальной загрузки изображения. Само собой разумеется, что если я создаю какой-либо объект, реализующий IDisposable , который также уничтожается тем же методом, я заключаю его в оператор using, например

using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName))
{
   image = Image.FromStream(resourceStream);
}

. Если я удаляю оператор using, чтобы поток не удаляется, тогда приложение больше не вылетает на XP. Но теперь у меня есть куча "сиротских" потоков - изображения хранятся в классах команд, и они правильно удаляют изображения, когда сами удаляются, а исходный поток - нет.

Я проверил документацию на предмет FromStream и подтверждает, что поток должен оставаться открытым. Почему это не так? t разбился и сгорел в системе разработки Windows 7, однако это загадка!

Я действительно не хочу, чтобы этот поток зависал, и я определенно не хочу хранить ссылку на этот поток, а также на изображение так что я могу избавиться от него позже. Мне нужен этот поток только один раз, поэтому я хочу избавиться от него :)

Можно ли создать образ, а затем сразу же убить поток?

14
задан Patrick Hofman 28 September 2015 в 07:31
поделиться