Можно ли использовать метод 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, однако это загадка!
Я действительно не хочу, чтобы этот поток зависал, и я определенно не хочу хранить ссылку на этот поток, а также на изображение так что я могу избавиться от него позже. Мне нужен этот поток только один раз, поэтому я хочу избавиться от него :)
Можно ли создать образ, а затем сразу же убить поток?