【求助】请问WinForm程序中界面类定义的Dispose方法怎么调用?

哈利_蜘蛛侠 2016-09-07 02:49:11
定义了一个界面AmazingDictionaryForm,里面有一个StreamReader对象,由于整个界面的使用过程中都需要用到这个对象,所以考虑在程序结束的时候释放它。可是据说析构函数不会马上调用,最好还是重载IDisposable的的Dispose方法,然后再手动调用。那么问题来了:现在在项目中只有这个地方实例化了一个AmazingDictionaryForm,请问我该怎么调用它的Dispose()方法呢?

Application.Run(new AmazingDictionaryForm());
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
最后,说一个概念性的东西。IDisposable 接口跟“析构”是两码事。析构函数很很晚才会调用,例如5秒钟之后才调用,但是Dispose方法(自动被.net 系统调用的时候)则比较早,在 GC 的早期就被自动调用,例如在一个对象已经没有“用了”之后2秒钟之后就被调用。Dispose()方法跟析构函数不一样,使用方法和编程意义也不一样,不要混淆。更具体的内容,跟你这个帖子关系不大,就不多说了。仅仅因为你说明自己的逻辑时有个混乱的理解,我这里帮你改进一下理解。
  • 打赏
  • 举报
回复
引用 楼主 u011873969 的回复:
可是据说析构函数不会马上调用,最好还是重载IDisposable的的Dispose方法,然后再手动调用。
初学者总是走各种极端,别人不小心出个无关的方面的讨论,他总是听错意思,总夸大别人的意思。 你既然要结束整个进程,Dispose 手动调不调用,.net 是不是在0.1秒或者0.5秒的时候调用它,你并不在乎。反正会自动调用它。 假设你并不结束进程,但是结束 AmazingDictionaryForm 实例对象,那么 .net 在几秒钟之内一定会使用 GC 去释放对象,释放之前会自动调用 Dispose 方法。所以如果你写不出来测试用来来说明为什么要及时地、手动地调用 Dispose,就不必像你看到的一些网上的文章说的那样去硬要自己调用它。.net 中有上万类型的对象都有 IDisposable 接口,那么你平常也不是死抠那些类型对象,为什么非要在此抠这一个类型的对象呢?
  • 打赏
  • 举报
回复
不用调用它。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧