Tag: 不在内存中

从流加载图像而不保持流打开

是否可以使用System.Drawing.Image的FromStream方法而不必在图像的生命周期内保持流打开? 我有一个应用程序,它使用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的文档,确认了流需要保持打开状态。 为什么这个没有在Windows 7开发系统上崩溃和烧毁是一个谜! 我真的不希望这个流徘徊,我当然不希望存储对这个流以及图像的引用,以便我以后可以处理它。 我只需要那个流一次所以我想摆脱它:) 是否有可能创建图像,然后在那里杀死流?