Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表单在试图隐藏它时被释放_C#_.net_Winforms - Fatal编程技术网

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
文件中)

我做了下面的实验,效果很好

  • 创建新的WindwsForms应用程序
  • 在窗体设计器的主窗体上放置时间
  • 添加
    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
    时修复它。唯一使用表单的其他代码是连接到服务器的按钮单击帮助我跟踪问题-有一个对象引用了表单并处理了它。