类型为' System.ObjectDisposedException'的未处理异常发生在System.dll中

时间:2014-08-20 07:25:06

标签: c# winforms

在我的项目中,当我通过调试运行它时,经过一段时间后,它突然崩溃了。它没有在任何特殊时间或特定时期之后发生。它崩溃了,我不知道为什么?!

我收到了这条消息:

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

及其图片,了解更多信息......

enter image description here

我正在使用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”后突然发生了这种情况。也许在第二次点击或更多...

之后

1 个答案:

答案 0 :(得分:0)

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

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,这对于已经处置的对象通常是不允许的。因此,例外。