做了个实验,我让frmTest只能运行一次实例,并且在上面放了个按钮,用于关闭,代码如下:
public partial class frmTest : Form
{
private static frmTest instance;
private frmTest()
{
InitializeComponent();
} public static frmTest Instance()
{
if (instance == null)
{
instance = new frmTest();
}
return instance;
} private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}然后在第二个窗体中调用上面的窗体:
public partial class frmCall : Form
{
private void buttonCall_Click(object sender, EventArgs e)
{
frmTest frmtest = frmTest.Instance();
frmtest.Show();
}
}第一次调用没有问题,但是在关闭frmtest后,再一次点击buttonCall,也就是再一次调用frmtest,这时会出现一个异常:Cannot access a disposed object.按照大家的理解,button1的Click事件只是close了frmtest窗体,"this.close()只是关闭一些连接或少量资源,实例还是存在的",这句话是从以前的帖子中抄来的,既然如此,在上例中,我并没有dispose,而只是close了一下,为什么就会出现了"不能访问一个disposed对象"了呢?于是我将frmTest的代码修改了一下:
public partial class frmTest : Form
{
private static frmTest instance;
private frmTest()
{
InitializeComponent();
} public static frmTest Instance()
{
if (instance == null || instance.IsDisposed) //修改了这里
{
instance = new frmTest();
}
return instance;
} private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}异常是没有了,但我不知道对内存的占用有没有影响,请高手点评!
public partial class frmTest : Form
{
private static frmTest instance;
private frmTest()
{
InitializeComponent();
} public static frmTest Instance()
{
if (instance == null)
{
instance = new frmTest();
}
return instance;
} private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}然后在第二个窗体中调用上面的窗体:
public partial class frmCall : Form
{
private void buttonCall_Click(object sender, EventArgs e)
{
frmTest frmtest = frmTest.Instance();
frmtest.Show();
}
}第一次调用没有问题,但是在关闭frmtest后,再一次点击buttonCall,也就是再一次调用frmtest,这时会出现一个异常:Cannot access a disposed object.按照大家的理解,button1的Click事件只是close了frmtest窗体,"this.close()只是关闭一些连接或少量资源,实例还是存在的",这句话是从以前的帖子中抄来的,既然如此,在上例中,我并没有dispose,而只是close了一下,为什么就会出现了"不能访问一个disposed对象"了呢?于是我将frmTest的代码修改了一下:
public partial class frmTest : Form
{
private static frmTest instance;
private frmTest()
{
InitializeComponent();
} public static frmTest Instance()
{
if (instance == null || instance.IsDisposed) //修改了这里
{
instance = new frmTest();
}
return instance;
} private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}异常是没有了,但我不知道对内存的占用有没有影响,请高手点评!
解决方案 »
- 如何实现缩小窗体仍旧能完整的看到菜单栏工具栏等
- TCP.UDP.Socket.P2P问题
- 求正则表达式
- //我这里定义一个Dictionary,并添加数据 Dictionary<string,string[]> dicData=new Dictionary<str
- 在出50分,合计100分求解答,用socket 下载到了一个页面,里面有LOCATION:“这为重定向地址”
- Response.Write页面没反应?
- 如何根据用户权限动态构建菜单?
- 自己建的C#类库,引用的时候出错
- C#多线程处理一张图片报异常,求助!!!!!!!!!!!!!!!!!!!
- c#代码写在aspx或者asp.cs里有什么区别?
- 这才暴强,轻松写作操作系统。普通人都能看懂的文章。
- c#如何判断字符串是否为中文?
this.Hide();