MyException - 我的异常网
当前位置:我的异常网» C# » 为什么窗体关闭之后还可以访问?解决方案

为什么窗体关闭之后还可以访问?解决方案

www.MyException.Cn  网友分享于:2013-04-27  浏览:17次
为什么窗体关闭之后还可以访问?
有这样两个窗体:
class   Form1()
{
   
}

class   Form2()
{
          public   string   name;
}

其中窗体1中有一个按钮,给按钮注册如下事件:
Form2   frm=new   Form2();
if(frm.ShowDialog()   ==   DialogResult.OK)
{
            MessageBox.Show(frm.name);
}

问题来了,当给frm的DialogResult赋值为DialogResult.OK后,frm自动关闭,但是既然还可以访问到这个frm,这是什么原因?

我开始以为是因为这个窗口并没有关闭,只是隐藏起来了,可是当我通过close或者dispose来关闭这个frm时(这时只要把if判断语句改成frm.ShowDialog()   ==   DialogResult.Cancel)就行了),仍然可以访问到这个frm,这是什么原因?

------解决方案--------------------
本来就可以嘛。Close或Dispose掉,又没有给这个frm设为null,当然是可以访问的。
------解决方案--------------------
楼上说的有道理,frm这个对象在内存中始终存在,除非置空
------解决方案--------------------
不是真正意义上的关闭
------解决方案--------------------
Form2 frm=new Form2(); 
你这句话已经声明了frm这个对象了,后面的什么事件方法多是操作frm里面的内容的

只要你没把frm赋值为null,就一定能访问的啊!
------解决方案--------------------
只是界面上看不到了而已。

我以前就在窗体关闭后写一些处理代码,把任务管理器中没关闭的该程序进程都杀掉。
------解决方案--------------------
有道理啊
探讨
本来就可以嘛。Close或Dispose掉,又没有给这个frm设为null,当然是可以访问的。

------解决方案--------------------
想彻底消失就 frm=null;
------解决方案--------------------
可能是gc还未回收吧,楼主可以在另一个函数里访问frm对象看是否报错
------解决方案--------------------
frm这个对象还在,除非不在作用域,或被显示的给释放掉
------解决方案--------------------
没有为空啊,你的frm的作用域还没过,引用还在,GC是不会回收的

Close只不过是窗体类的一个方法而已。那个语句显示对象不存在了?
不要被表象迷惑
------解决方案--------------------
对象一直都存在的,除非frm被置空,不然这段代码没有执行完之前这个对象一直都会存在,dispose是释放掉了所占用的资源。
------解决方案--------------------
在.net的 Form 类其实是两层,一层是Windows意义上的窗口,由Handle属性来标识,所有对这个窗口的操作都必须通过Windows API 来实现,比如关闭窗口, Form.Close() 中调调用 DistroyWindow(Handle);这时这个窗口确定关了,因为你已经看不到了.
还有一层,就是.NET中的类,如Form类,Form类的一个对象并不等同于一个窗口,它的作用是来管理一个窗口的,可以理解为"窗口管理类",虽然窗口关了,但这个管理窗口的类还存在,它里面所有自定义的数据成员还存在,只有当frm = null;之后,.net才会释放该对象.
(当然,如果只把frm=null而没有Close(),则窗口不对关闭,还能看得到).
------解决方案--------------------
楼上说有道理!
------解决方案--------------------
close 知识不显示窗口,实际上着个对象还是存在的,
窗口资源释放后,就不能访问了,这时对象就不存在了
------解决方案--------------------
close() 只是关系和释放其上面的资源,对本身的内存不释放,只有 frm = null后是真正意义的关闭 在内存中不存大些对象

文章评论

 程序员的样子
程序员的样子
一个程序员的时间管理
一个程序员的时间管理
总结2014中国互联网十大段子
总结2014中国互联网十大段子
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
代码女神横空出世
代码女神横空出世
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
鲜为人知的编程真相
鲜为人知的编程真相
10个调试和排错的小建议
10个调试和排错的小建议
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
旅行,写作,编程
旅行,写作,编程
我的丈夫是个程序员
我的丈夫是个程序员
如何成为一名黑客
如何成为一名黑客
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
每天工作4小时的程序员
每天工作4小时的程序员
老程序员的下场
老程序员的下场
程序员都该阅读的书
程序员都该阅读的书
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
中美印日四国程序员比较
中美印日四国程序员比较
漫画:程序员的工作
漫画:程序员的工作
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员和编码员之间的区别
程序员和编码员之间的区别
Java程序员必看电影
Java程序员必看电影
那些争议最大的编程观点
那些争议最大的编程观点
我是如何打败拖延症的
我是如何打败拖延症的
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员的鄙视链
程序员的鄙视链
程序员必看的十大电影
程序员必看的十大电影
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有