C# 中 PictureBox 加载图片后无法删除解决方法
来源:互联网 发布:js加载完成后触发 编辑:程序博客网 时间:2024/04/28 03:39
PictureBox加载图片后,再将Image属性值设置为null,但本地图片仍无法删除,提示文件正被另一个程序使用,相关代码:
究其原因应是Image属性值设置为null,但资源仍未释放,需等垃圾回收器回收,那我们就手动释放资源再测试下:
终于可以删除了!但如果图片在使用中时试图删除图片,上边代码又不行了,解决方法是将本地图片读到内存流(相当于复制一份图片),再将内存流转化为Image对象并绑定到PictureBox的Image属性,这样原图可正常删除,代码如下:
复制内容到剪贴板程序代码
//显示图片
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;
}
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();
}
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 = 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);
}
- C# 中 PictureBox 加载图片后无法删除解决方法
- Picturebox加载图片后在删除该图片时的报错问题的解决方法
- C#中PictureBox异步加载图片
- C#中PictureBox加载网络图片
- C#中PictureBox异步加载图片
- 关于C#中PictureBox加载动态GIF所出现的BUG以及解决方法
- C# 两PictureBox图片交换(ImageLacation) 选中边框 外部图片可直接拖入到PictureBox中显示
- 解决C#中picturebox加载大图报内存溢出问题
- picturebox加载图片的方法
- C#中PictureBox控件获取网络图片并显示出来
- C#的pictureBox中显示网上的图片
- C#中PictureBox控件获取网络图片并显示出来
- C# 从硬盘托图片在picturebox中打开
- C# 中 结合PictureBox和Resources.resx添加图片
- C#鼠标拖动图片picturebox
- C#鼠标拖动图片picturebox
- C# picturebox循环显示图片
- springmvc controller跳转后jsp页面无法加载静态资源css,图片等错误解决方法
- UIDatePicker 日期/时间选取器(滚轮)
- 毕业回忆我的大学(2)——上课、考试
- flex视频\声音录制及播放
- 恶搞诗
- Windows下NDK开发环境的搭建(Cygwin+Android-SDK+NDK)
- C# 中 PictureBox 加载图片后无法删除解决方法
- 给文案披上美术外衣
- javascript tips
- ubuntu下的davison的monoslam安装
- zendFramework分析2:引导程序
- IVF实现时间函数
- 自定义View做的一个Clock案例
- 图片轮播插件
- 关于代码合并