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

C# System.dll中发生类型为“System.ObjectDisposedException”的未处理异常,c#,winforms,C#,Winforms,在我的项目中,当我通过调试运行它时,经过一段时间后,它突然崩溃了。它没有发生在任何特定的时间或特定的时间之后。它自己坠毁了,我不知道为什么 我得到了这个信息: An unhandled exception of type 'System.ObjectDisposedException' occurred in System.dll Additional information: Cannot access a disposed object. 它的图片,更多信息 我正在与vs 2013和C w

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

我得到了这个信息:

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后突然发生的。可能在第二次或更多次单击后…

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

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,这在已处理的对象上通常是不允许的。因此,异常。

似乎是相关的:是否没有可用的异常堆栈跟踪?应该让你很容易地追踪到这个问题…@WolfgangZiegler我改变了图片。它显示StackTrace。也许它发生在缓冲区的bcz。可能吗?如何处理缓冲区异常?容易的我认为btnConnect\u Click事件处理程序中也应该有一个空检查,或者可能是重新创建/重新连接socketComponent的逻辑。我测试了您的代码,但没有解决我的问题。它仍然显示该异常如果调用connect,该异常仍然可能发生。您还必须检查连接单击中的socketComponent是否为null。或者在每次调用connect时重新创建对象。