C# 中 PictureBox 加载图片后无法删除解决方法
2012-06-29 17:06
363 查看
PictureBox加载图片后,再将Image属性值设置为null,但本地图片仍无法删除,提示文件正被另一个程序使用,相关代码:
复制内容到剪贴板程序代码
//显示图片
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(@"f:\demo.gif");
}
//不显示图片
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;
}
究其原因应是Image属性值设置为null,但资源仍未释放,需等垃圾回收器回收,那我们就手动释放资源再测试下:
复制内容到剪贴板程序代码
//显示图片
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(@"f:\demo.gif");
}
//不显示图片并释放资源
private void button2_Click(object sender, EventArgs e)
{
Image image = pictureBox1.Image;
pictureBox1.Image = null;
image.Dispose();
}
终于可以删除了!但如果图片在使用中时试图删除图片,上边代码又不行了,解决方法是将本地图片读到内存流(相当于复制一份图片),再将内存流转化为Image对象并绑定到PictureBox的Image属性,这样原图可正常删除,代码如下:
复制内容到剪贴板程序代码
//显示图片
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = GetFile(@"f:\demo.gif");
}
//不显示并释放资源
private void button2_Click(object sender, EventArgs e)
{
Image image = pictureBox1.Image;
pictureBox1.Image = null;
image.Dispose();
}
///
/// 将文件转为内存流
///
///
///
private MemoryStream ReadFile(string path)
{
if (!File.Exists(path))
return null;
using (FileStream file = new FileStream(path, FileMode.Open))
{
byte[] b = new byte[file.Length];
file.Read(b, 0, b.Length);
MemoryStream stream = new MemoryStream(b);
return stream;
}
}
///
/// 将内存流转为图片
///
///
///
private Image GetFile(string path)
{
MemoryStream stream = ReadFile(path);
return stream == null ? null : Image.FromStream(stream);
}
复制内容到剪贴板程序代码
//显示图片
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(@"f:\demo.gif");
}
//不显示图片
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;
}
究其原因应是Image属性值设置为null,但资源仍未释放,需等垃圾回收器回收,那我们就手动释放资源再测试下:
复制内容到剪贴板程序代码
//显示图片
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(@"f:\demo.gif");
}
//不显示图片并释放资源
private void button2_Click(object sender, EventArgs e)
{
Image image = pictureBox1.Image;
pictureBox1.Image = null;
image.Dispose();
}
终于可以删除了!但如果图片在使用中时试图删除图片,上边代码又不行了,解决方法是将本地图片读到内存流(相当于复制一份图片),再将内存流转化为Image对象并绑定到PictureBox的Image属性,这样原图可正常删除,代码如下:
复制内容到剪贴板程序代码
//显示图片
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = GetFile(@"f:\demo.gif");
}
//不显示并释放资源
private void button2_Click(object sender, EventArgs e)
{
Image image = pictureBox1.Image;
pictureBox1.Image = null;
image.Dispose();
}
///
/// 将文件转为内存流
///
///
///
private MemoryStream ReadFile(string path)
{
if (!File.Exists(path))
return null;
using (FileStream file = new FileStream(path, FileMode.Open))
{
byte[] b = new byte[file.Length];
file.Read(b, 0, b.Length);
MemoryStream stream = new MemoryStream(b);
return stream;
}
}
///
/// 将内存流转为图片
///
///
///
private Image GetFile(string path)
{
MemoryStream stream = ReadFile(path);
return stream == null ? null : Image.FromStream(stream);
}
相关文章推荐
- Picturebox加载图片后在删除该图片时的报错问题的解决方法
- C#解决文件被占用资源,无法删除或修改的方法
- ImageView中无法加载显示本地SDCard图片问题的解决方法
- win7(iis7)无法加载运行CSS和图片的解决方法
- Flex使用ant编译的时候无法加载css样式表中的图片解决方法
- C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法
- 【Android】Universal Image Loader图片加载框架无法加载https图片问题解决方法
- apache代理tomcat无法加载css,js,图片等资源的解决方法
- 解决tmpl插件与图片自动轮播插件结合使用,无法加载mytv()方法问题
- 解决IE6下JS动态设置图片IMG的SRC时图片无法加载错误的方法
- Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)
- 解决IE6下JS动态设置图片IMG的SRC时图片无法加载错误的方法
- C#.net中当地址有中文时,图片无法显示解决方法
- IE 6 下无法加载图片的奇怪问题及其解决方法
- c# p/invoke 无法加载指定的dll 找不到指定的模块 解决方法
- springmvc controller跳转后jsp页面无法加载静态资源css,图片等错误解决方法
- c#中pictureBox显示图片文件无法删除
- C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法
- 关于C#中PictureBox加载动态GIF所出现的BUG以及解决方法
- 通过js去预加载图片,无法正常取得图片高度和宽度的解决方法