网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.C#中实现随机时间的获取.
.将PUBS中的所有用户表内容分别用.
.c#操作word表格.
.在C#中运用SQLDMO备份和恢复Micr.
.在C#应用程序与DLL交互中使用消息.
.在C#里使用using操作符.
.c#调用oracle存储过程返回结果集.
.C#中的非安全编程.
.利用C#实现标准的 Dispose模式.
.IP数据包的校验和算法C#版.
.C# 文件操作(上传 下载 删除 文件.
.C#结合串口通信类实现串口通信源.
.用C#压缩和修复Access数据库.
.通过win32api让c#控制Windows任务.
.利用正则表达式来反转一句话,以单.
.用C#截取指定长度的中英文混合字.
.用C#下的Raw Socket编程实现网络.
.代码前置时页面输出脚本的要注意.
.[C#]解决读写包含汉字的txt文件时.
.如何用.NET Array类的Sort方法分.

从小处看C#.net垃圾回收

发表日期:2006-12-5


如果不用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;

}

当然可能有其他的方法,各位看客有兴趣的话补充一下。另外有叙述不当的地方,请多多指教,在下感激不尽。
http://www.cnblogs.com/wangguozheng/archive/2006/12/04/581488.html

上一篇:用C#动态创建Access数据库 人气:5741
下一篇:C#一个象棋游戏程序 人气:6781
浏览全部C#的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐