winforms System.dll中发生类型为“System.ObjectDisposedException”的未经处理的异常

64jmpszr  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(363)

在我的项目中,当我通过调试运行它的时候,运行了几次之后,它突然崩溃了。它不是在任何特定的时间发生的,也不是在特定的时间段之后发生的。它自己崩溃了,我不知道为什么!
我得到了这样的消息:

An unhandled exception of type 'System.ObjectDisposedException' occurred in System.dll
Additional information: Cannot access a disposed object.

这是它的图片,了解更多信息...

我正在使用VS 2013和C# win form...
它是我的简单代码:

private void btnConnect_Click(object sender, EventArgs e)
    {
        Result = socketComponent.tcpConnect(Host, int.Parse(Port));
        if (Result == 0)
            MessageBox.Show("Connected"); 
    }

private void btnDisconnect_Click(object sender, EventArgs e)
{
    if (socketComponent != null)
    {
        socketComponent.tcpDisconnect();

        socketComponent.Dispose();
        MessageBox.Show("DisConnected"); 
    }

}

点击btnDisconnect后突然发生。可能在第二次点击或更多后...

e4eetjau

e4eetjau1#

我的猜测是,您应该像这样更改代码:

private void btnDisconnect_Click(object sender, EventArgs e)
{
    if (socketComponent != null)
    {
        socketComponent.tcpDisconnect();

        socketComponent.Dispose();

        // set to null!
        socketComponent = null;
        //

        MessageBox.Show("DisConnected"); 
    }
}

因为否则,第二次单击“btnDisconnect”将再次调用Dispose,这通常不允许在已释放的对象上进行。因此,出现异常。

gblwokeq

gblwokeq2#

断开连接按钮的代码包括:

socketComponent.Dispose();

因此,第二次(及以后)尝试连接socketComponent时,它将被释放。* 在释放对象后,不允许使用它 *,因此请从代码中删除该行。

相关问题