//对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环境下调用的话容易出现这个错误, 这是为什么?
}为什么会出现这个错误?
为什么有时候会出现这个错误, 有时候不会?

解决方案 »

  1.   

    private static FrmClass frm; 
    public static FrmClass GetInstance() 
    这里好像有问题.你把static换成其它的看看.
      

  2.   

    不用static的话就不能做单例了
      

  3.   

    如果窗体使用后每次都dispose了的话为什么还要使用单例模式呢?
      

  4.   

    当关闭窗体再次调用的时候会发现, frm.IsDisposed == true 但 frm != null, 为什么?
      

  5.   

    你肯定在调用的时候出错的。这个是C#的自动回收机制啊。去看看这方面的知识吧。你关闭窗体。它就设为IsDisposed为true,表示该窗口占用的resource已经释放了。但是这时候系统可能还没有收集。只是标识这个该收集了。至于什么时候收集就是系统决定的了。所以你去判断的时候它不为空,就不会创建新的。但是它已经把所有的资源释放了。所以这套机制就不让你去访问啊。因为它不一定什么时候就被回收了。那就是null了。
      

  6.   


    我已经试过了:
    frm.IsDisposed == true 但 frm != null
      

  7.   

    public static FrmClass GetInstance() 

        if (frm == null || frm.IsDisposed ) 
          frm = new FrmClass();     return frm;