相关疑难解决方法(0)

新Bitmap(filePath)锁定的免费文件

我有一个PictureBox的图像指向某个文件"A".在执行时我想将PictureBox的图像更改为另一个"B"但我收到以下错误:

"mscorlib.dll中出现'System.IO.IOException'类型的第一次机会异常附加信息:进程无法访问文件"A",因为它正由另一个进程使用."

我将Image设置如下:

pbAvatar.Image = new Bitmap(filePath);
Run Code Online (Sandbox Code Playgroud)

如何解锁第一个文件?

c# image file picturebox

38
推荐指数
5
解决办法
4万
查看次数

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

是否可以使用System.Drawing.Image的FromStream方法而不必在图像的生命周期内保持流打开?

我有它加载了一堆从资源文件工具栏的图形,使用的组合应用程序Image.FromStreamAssembly.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开发系统上崩溃和烧毁是一个谜!

我真的不希望这个流徘徊,我当然不希望存储对这个流以及图像的引用,以便我以后可以处理它.我只需要那个流一次,所以我想摆脱它:)

是否有可能创建图像,然后杀死那里的流?

c# image stream out-of-memory

14
推荐指数
1
解决办法
9751
查看次数

标签 统计

c# ×2

image ×2

file ×1

out-of-memory ×1

picturebox ×1

stream ×1