网站地图 | 联系我们 | 咨询热线:0991-4811639
您现在的位置: 新疆二域设计网络公司 >> 网页设计学院 >> 网络编程 >> NET编程 >> 正文

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

}

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

作者:佚名 | 文章来源:不详 | 更新时间:2007-5-4 11:12:26

  • 上一篇文章:

  • 下一篇文章:
  • 相关文章:
    用C#对DBF数据库的操作
    关于C#中的DateTime类型的细节问题
    C# 编写木马程序…
    用C#访问ACCESS数据库问题
    如何充分利用C#匿名方法的平台优势

    色彩理念
    网页制作
    美工图形
    网络编程
    数 据 库
    网站运营
    ::最近更新::
    ·程序开发中对日志的处理
    ·textbox 仿照计算器文本框…
    ·在ASP.NET AJAX中防止用户…
    ·使用PostSharp进行AOP框架…
    ·AnimationExtender控件的动…
    ·ASP.NET 2.0中客户端脚本使…
    ·正则表达式初级知识
    ·.NET之对接口和抽象类
    ·.NET程序编译错误类型系统…
    ·ASP.NET生成静态页面和分页
    ·asp.net ajax 无法弹出ale…
    ·asp.net Ajax---Validator…
    ·从.Net类库代码来看Asp.ne…
    ·向Asp.net Ajax 传入DateT…
    ·Ajax中动态执行返回到inne…
    ::推荐阅读::
    ·用C#对DBF数据库的操作
    ·如何建立自己的新闻发布系…
    ·用C#访问ACCESS数据库问题
    ·ASP.NET技巧:脚本获取选中…
    ·Asp.Net小技巧之在client端…
    ·ASP.NET入门数据篇

    关于我们 | 网站建设 | 服务帮助 | 联系我们 | 网页设计学院 | 实用工具 | 友情链接 | 新疆专题
    版权所有 © 2007 新疆二域设计网络公司 www.xjcncn.com All Rights Reserved
    网站建设总机:0991-4811639 传真:0991-4842803 ;咨询热线:13999201770. E-mail:xjcncn@gmail.com
    MSN :xjcncn@hotmail.com ; QQ:359312 ;地址:新疆乌鲁木齐市友好E时代公寓B座708 邮编:830000