- 浏览: 31268 次
- 性别:
最新评论
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);
}
发表评论
-
xml学习
2015-05-29 21:15 638namespace xml学习 { class Pro ... -
用反射给触发器添加功能
2015-05-28 18:15 399using System; using System.Coll ... -
反射介绍
2015-05-28 13:50 540static void Main(string ... -
list集合中进行排序
2015-05-27 13:21 746namespace list集合中的排序方法 { cl ... -
用接口和委托两种方式实现用户登录
2015-05-27 12:24 596------------------------------- ... -
sqlHelper
2015-04-22 17:33 485using System; using System.Coll ... -
ado.net实现分页和用dataadapter实现增加修改删除
2015-04-22 16:19 863using System; using System.Coll ... -
用dom的形式访问xml文档一
2014-06-11 21:06 612xml文档: <items> < ... -
XmlTextWriter生成xml文件
2014-06-11 20:36 786XmlTextWriter writer = new XmlT ... -
C#中的listview绑定 xml文件中的数据并显示
2014-06-11 19:57 1764xml:文件内容 <?xml version=" ... -
repeater控件实现数据绑定并分页
2015-05-28 13:51 932前台:添加一个Repeater 控件 四个LinkButton ... -
.net中在后台代码中构建html代码在前台显示
2014-06-08 20:06 1033目的:从数据库中查出一个表,将表中的name列的值,用表格的形 ... -
C#中null和""的区别
2013-07-18 16:14 586string str = null 没有创建内存空间,str中 ... -
[DllImport("user32.dll")]
2013-07-17 18:19 1378这叫引入user32.dll这个动态连接库。 这个动态连接库里 ... -
解决方案资源管理器中显示bin,Debug等文件夹
2013-07-17 17:09 8501.项目 -- 显示所有文件 2.右击新出现的bin,De ... -
c#编码规范
2013-07-16 19:11 4991.命名规范 (1)所有的函数(变量/类/文件名)应该代表其实 ... -
wiform中获取当编写代码右侧可以看见的文件夹的路径的方法
2013-06-06 17:45 624这个原理是先获取根目录之后再利用字 ... -
对xml文档的一些基本操作主要代码
2013-06-01 00:45 789using System; using System.Coll ... -
不同的Form窗体中传值方法
2013-03-20 23:45 872第一个方法设全局变量: 双向传值,也就是说,form1和fo ... -
用vs建网站是添加一个网站启动的快捷方式
2012-11-08 00:17 687首先建一个网站 -然后左击一下解决方案 -点击左上角的文件在下 ...
相关推荐
winform在pictureBox控件上绘制矩形框,鼠标点击可拖拽,伸缩
思路:说是清除,实际上是用背景色做了一下覆盖 在winform上添加一个picturebox1,绘制一条线,然后拖动鼠标,再绘制一个矩形,并填充背景色
第6页 C#(WINFORM)学习 找到集合中数量最多的一个元素 利用方法来查找,可以返回两个变量。 object Jmax0(ArrayList v11,ref int jj) { int i; object j0=0; ArrayList y11=new ArrayList(); //各个不同的元素的...
序中判断是否为数字的方法有很多种,可以使用正则表达式、int.Parse 方法和double.Parse 方法等。下面的代码 通过double.Parse 方法判断textBox1 文本框中的输入是否为数字。 double.Parse(textBox1.Text); 实例573 ...
74 <br>0107 如何获得字符串中数字或字母的长度 74 <br>0108 如何获得字符串中某个数字的位置 75 <br>0109 获得字符串中汉字的个数 76 <br>0110 获得字符串中指定后几位字符 76 <br>0111 ...
1、C# 多个ip摄像头画面预览以及截图界面 2、winform VS2013 .NET4 Client Profile 3、测试摄像头:海康威视 亲测有效哦,绝对物超所值! ...预览、抓图、客户端录像基本功能...5、IP通道设置(添加、修改、删除)功能。
1、使用Winform中PictureBox控件自制C#曲线面板显示数据曲线。 2、在曲线上进行关键帧数据添加操作 3、在曲线上进行关键帧数据删除操作 4、关键帧数据得数值编辑、修改操作 5、对关键帧数据进行插值计算得到曲线数据...