All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
使用 jQuery(Ajax)MySQL实现自动完成功能_[AJAX教程]
ASP.NET,MVC+LINQ开发一个图书销售站点(2)-对象及其关系_[Asp.Net教程]
数据回发时,维护ASP.NET,Tree控件位置_.net资料_编程技术
数字的转换char,to,int
ASP.NET,入门的五个步骤_[Asp.Net教程]
根据IP获取当地天气预报的实现_[Asp.Net教程]
Asp.Net,构架
ASP.NET:多级下拉菜单的级连显示问题_.net资料_编程技术
ADO.NET链接数据库DataAdapter对象应用实例
ASP.NET,MVC,Framework体验(2):显示列表数据_[Asp.Net教程]
Reading number is top 10 pictures
来几张有特色的图片
Thrilling English baby
The money of more than 100 countries and regions6
含苞欲放的素颜美少女3
The Soviet union swimsuit exposure in the 70 year2
From China fortress sora aoi1
Startling Russian girl blind date scene2
生活中总有些低调的人,不经意间散发出土豪的气质
9.3阅兵全景图4-陸海空现代化兵种方阵梯队
NeedWallpaper8
Download software ranking
电脑知识及技巧大合集
传奇私服架设教程
Tram sex maniac 2 (H) rar bag10
C#编程思想
星际争霸1.08硬盘免安装版
apache-tomcat-6.0.33
Tram sex maniac 2 (H) rar bag8
Unix video tutorial2
Eclipse 4.2.2 For Win32
C++编程教程第三版
aaa published in(发表于) 2013/12/13 9:42:13 Edit(编辑)
从小处看C#.net垃圾回收_.net资料_编程技术

从小处看C#.net垃圾回收_.net资料_编程技术

从小处看C#.net垃圾回收_.net资料_编程技术-你的首页-uuhomepage.com

如果不用MDI来实现一个主窗体打开多个子窗体时,


从一个窗体(主窗体)打开一个(only one) 另外一个的窗体(子窗体)的实现


父窗体:MainForm


public partial class MainForm:Form


{


............



private void menuItem1_Load(object sender,EventArgs e)


{


ChildForm child1=ChildForm.Create();


child1.show();


child1.Focus();


}



//......


}



子窗体:ChildForm



public partial class ChildForm:Form


{


.....



static ChildForm child;



Public static ChildForm Create()


{


if(child==null)


child=new ChildForm();


return Child;


}


......


}



F5运行后,的确实现了上面提到的功能。然而,把子窗体关闭后,想再次打开该子窗体时,单击菜单项,会出现异常:ObjectDisposedException was unhandled.



这是为什么呢??



这里涉及到C#垃圾回收的问题:



垃圾回收是.NET运行库的一部分。垃圾回收器管理所有的托管对象,所有需要托管数据的.NET语言(包括 C#)都受运行库的垃圾回收器的制约。垃圾回收器可以确定运行垃圾回收的最佳时间,自动进行垃圾回收。然而垃圾回收的一个产物是:C# 对象没有确定性毁坏。所以会出现对象child已被销毁,但又不为null,访问时产生ObjectDisposedException异常。



怎么办??



方法:应该彻底回收Child所占的资源。


途径有二:


方法一:


修改子窗体的构造函数


public ChildForm()


{


//.........


this.Disposed+=new System.EventHandler(Form_Disposed)


}


然后事件Form_Disposed的处理函数


private void Form_Disposed(object sender,EventArgs e)


{


Child=null;


}


方法二:


重写ChildForm的OnClosed方法


Protected void OnClosed(EventArgs e)


{



base.OnClosed(e);
child=null;


}


当然可能有其他的方法,各位看客有兴趣的话补充一下。另外有叙述不当的地方,请多多指教,在下感激不尽。






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.