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时重新创建对象。