分享到: 百度 更多

单例模式

//对FrmClass窗体使用单例
private static FrmClass frm;
public static FrmClass GetInstance()
{
  if (frm == null)
  frm = new FrmClass();

  return frm;
}

//FormClosing事件处理程序
private void FrmClass_FormClosing(object sender, FormClosingEventArgs e)
{
  //frm = null;
  //这里如果不释放frm的话, 当关闭窗体再次调用时有时候会出现"无法访问已释放的对象"错误提示, 然而有时不会出现
  //具体的感觉是MDI环境下调用的话容易出现这个错误, 这是为什么?
}

为什么会出现这个错误?
为什么有时候会出现这个错误, 有时候不会?

 

首先窗体这个类比较特别,关闭窗体。它就设为IsDisposed为true,表示该窗口占用的resource已经释放了。但是这时候系统可能还没有收集。只是标识这个该收集了。至于什么时候收集就是系统决定的了。所以你去判断的时候它不为空,就不会创建新的。但是它已经把所有的资源释放了。所以这套机制就不让你去访问啊。因为它不一定什么时候就被回收了。那就是null了。

posted @ 2012-07-29 21:32  黑马_Summer  阅读(116)  评论(0编辑  收藏  举报
分享到: 百度 更多