我有一个PictureBox的图像指向某个文件"A".在执行时我想将PictureBox的图像更改为另一个"B"但我收到以下错误:
"mscorlib.dll中出现'System.IO.IOException'类型的第一次机会异常附加信息:进程无法访问文件"A",因为它正由另一个进程使用."
我将Image设置如下:
pbAvatar.Image = new Bitmap(filePath);
Run Code Online (Sandbox Code Playgroud)
如何解锁第一个文件?
是否可以使用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);
}
Run Code Online (Sandbox Code Playgroud)
如果我删除using语句以便不处理流,则应用程序不再在XP上崩溃.但我现在有一堆"孤儿"流 - 图像存储在命令类中,这些图像在处理时正确处理图像,但原始流不是.
我检查了文档,FromStream确认流需要保持打开状态.为什么这个没有在Windows 7开发系统上崩溃和烧毁是一个谜!
我真的不希望这个流徘徊,我当然不希望存储对这个流以及图像的引用,以便我以后可以处理它.我只需要那个流一次,所以我想摆脱它:)
是否有可能创建图像,然后杀死那里的流?