C# 资源释放问题

privatevoidForm1_Load(){pictureBox1.Image=Image.FromFile("C:\1.jpg");}privatevoidbutt... private void Form1_Load()
{
pictureBox1.Image=Image.FromFile("C:\1.jpg");
}
private void button1_Click()
{
pictureBox1.Dispose();
System.IO.File.Delete("C:\1.jpg");
}
怎样才能使程序不出错?
异常截图:
展开
 我来答
shine雪瑞
推荐于2016-07-11 · 知道合伙人教育行家
shine雪瑞
知道合伙人教育行家
采纳数:140 获赞数:26668
学生

向TA提问 私信TA
展开全部
Dispose是用来释放非托管资源的,并不会释放托管资源,new是从托管堆中分配得资源,只能通过GC回收,无法手动释放。你可以使用System.GC.Collect()来强制进行GC,用System.GC.WaitForFullGCComplete()等待GC完成。
如果确实需要,使用System.Runtime.InteropServices.Marshal来手动申请和释放非托管内存,但是,其中无法保存托管对象,只能保存整型、浮点型和字符型及其数组,或者具有StructLayout或MarshalAs特性的结构或类。 (会带来一定的运行期代价)
freeeeeewind
推荐于2016-10-07 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1351万
展开全部
小问题!你把要释放的对象弄错了。这样修改
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image.Dispose(); //释放pictureBox1.Image
System.IO.File.Delete(@"C:\1.jpg");
}
另外 pictureBox1.Image=Image.FromFile("C:\1.jpg")中字符串有问题,
应改为
pictureBox1.Image=Image.FromFile(@"C:\1.jpg");
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户24555
2013-09-22 · 贡献了超过316个回答
知道答主
回答量:316
采纳率:0%
帮助的人:98.1万
展开全部
赞成二楼的观点,你释放的不是资源文件,而是控件3950
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尔偶一下
2013-09-22 · 超过84用户采纳过TA的回答
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:161万
展开全部
赞成二楼的观点,你释放的不是资源文件,而是控件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式