首页 新闻 会员 周边 捐助

winform窗体中调用this.dispose()与窗体关闭的时候调用designer.cs中的Dispose(bool disposing) 作用有什么区别?

1
[已关闭问题] 关闭于 2017-06-17 14:30

winform窗体中调用this.dispose()与窗体关闭的时候调用designer.cs中的Dispose(bool disposing) 作用有什么区别?

作用是否一样,一样的话单独调用this.dispose()就没有意义了,如果不一样的话,他们起的作用有什么区别?

小徐的工作学习随笔的主页 小徐的工作学习随笔 | 初学一级 | 园豆:183
提问于:2017-06-14 20:53
< >
分享
所有回答(2)
0

没什么区别,你可以在form cs里面的看到调用,并且判定了dispose标志。实际上组建类,你不调用,只要去实现了都没问题。

花飘水流兮 | 园豆:13617 (专家六级) | 2017-06-14 21:02

—— 补充一下,基于form等容器管理哈。

比如你自己的类那就只能手动了。

支持(0) 反对(0) 花飘水流兮 | 园豆:13617 (专家六级) | 2017-06-14 21:13

@花飘水流兮: 考虑的范围,目前只限于winform窗体。

@花飘水流兮: 不是很明白,你什么意思,1:form.cs 中调用的时候,是入参为空的this.Dispose(),designer.cs中的Dispose(bool disposing),是带了入参的,是同一个函数还是两个不同的函数?2:designer.cs中的Dispose(bool disposing)不是我去实现的,是新建窗体的时候,自动生成的,能不能帮我解答一下这两个问题;还有想在窗体关闭的时候,将托管的资源和非托管的资源都释放干干净净的,该怎么做呢?GC 只回收托管的资源。

@小徐的日记本: 

Component:

public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize((object) this);
}

 

Form:


public void Close()
{
if (this.GetState(262144))
throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[1]
{
(object) "Close"
}));
if (this.IsHandleCreated)
{
this.closeReason = CloseReason.UserClosing;
this.SendMessage(16, 0, 0);
}
else
this.Dispose();
}

 

明白没,不清楚就多看源码,如果都不能自动管理之类的,那么ms定义一个接口在这就没有意义,他们又不是菜鸟不会干这种事的。

支持(0) 反对(0) 花飘水流兮 | 园豆:13617 (专家六级) | 2017-06-14 22:41
0

使用dispose模式(就你问题中提到的一个没有参数的dispose和一个有参数的dispose)在一些包含析构函数的地方是作为标准的一种实现,同时保证了正常使用时可以释放托管/非托管资源,也可以保证在未调用但已经被GC认为是垃圾后执行析构函数对非托管资源的释放。

winform中没怎么了解过,但其实现的也就上面这些东西了。

 

Daniel Cai | 园豆:10424 (专家六级) | 2017-06-14 23:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册