C# 表单在试图隐藏它时被释放
我试图在某个事件中隐藏我的主窗体,然后稍后再显示它。问题是,当我隐藏表单时,它会被处理掉 我隐藏表单的代码:C# 表单在试图隐藏它时被释放,c#,.net,winforms,C#,.net,Winforms,我试图在某个事件中隐藏我的主窗体,然后稍后再显示它。问题是,当我隐藏表单时,它会被处理掉 我隐藏表单的代码: private void MessageRecived(object sender) { //Do stuff if (status == NetConnectionStatus.Connected) { this.Hide(); } else if (status == NetConnectionStatus.Disconnec
private void MessageRecived(object sender)
{
//Do stuff
if (status == NetConnectionStatus.Connected)
{
this.Hide();
}
else if (status == NetConnectionStatus.Disconnected)
{
this.Show();
}
//Do some more stuff
}
调用“this.Show()”方法时,会引发以下异常:
System.ObjectDisposedException
其他信息:无法访问已处置的对象
我也尝试过使用“this.Visible=false”和“this.SetVisibleCore(false)”但得到了相同的结果
如何隐藏表单而不进行处理?
编辑:
private void MessageRecived(object sender)
{
//Do stuff
if (status == NetConnectionStatus.Connected)
{
this.Hide();
}
else if (status == NetConnectionStatus.Disconnected)
{
this.Show();
}
//Do some more stuff
}
我发现了我的错误:代码中有一个对象引用了表单,它关闭了表单。感谢Justin Harvey,他指出有其他东西在使用表单。您的表单似乎是由垃圾收集器或其他代码处理的。 在中设置断点
protected override void Dispose(bool disposing)
方法(通常在NAME.Designer.cs
文件中)
我做了下面的实验,效果很好
FormClosing
事件处理程序勾选事件处理程序
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Press Yes to Hide only the Form?", "Exit", MessageBoxButtons.YesNo) ==
DialogResult.Yes)
{
e.Cancel = true;
timer1.Enabled = true;
Hide();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Show();
timer1.Enabled = false;
}
不相关,但您并没有检查if语句中的相等性,而是在分配状态。将它们更改为
status==NetConnectionStatus.Connected
和status==NetConnectionStatus.Disconnected
。另外,在//做东西
和//做更多的东西
中发生了什么,因为控件。隐藏
不是通过设计来处理的。处理它的不是隐藏,你能显示使用表单的代码吗?@AlexGravely你是正确的,我将在调用messagereceived
时修复它。唯一使用表单的其他代码是连接到服务器的按钮单击帮助我跟踪问题-有一个对象引用了表单并处理了它。