【发布时间】:2015-01-30 16:13:50
【问题描述】:
我的类库用于通过套接字获取和发送文本消息时遇到了很大的问题。这是我的简单代码:
private void AcceptNewSocket()
{
Socket socket = list.AcceptSocket();
socket.ReceiveBufferSize = 1001;
Thread socketTh = new Thread(new ThreadStart(AcceptNewSocket));
socketTh.Start();
WaitForMessenge(socket);
}
private void WaitForMessenge(Socket socket)
{
byte[] buff = new byte[1001];
int bufcount = socket.Receive(buff);
/////////some operations on byte array
while(bufcount > 0)
{
buffcount = socket.Receive(buff); //HERE it throws ObjectDisposedException and source is socket
/////some operations on byte array
}
}
当我在控制台应用程序中使用我的库时,没有任何异常。当我在 Windows 窗体应用程序中使用它时会发生这种情况。你能帮帮我吗?
【问题讨论】:
-
放弃并使用像 Lindgren 这样的东西来建立您的网络。使用原始套接字绝非易事。
-
如果套接字在其他任何地方关闭,调用 Receive 方法会给你这个异常。确保在使用之前检查对象是否已被处置。
-
我不会关闭它。它在控制台应用程序之间的通信中运行得很好。
-
@LexLi - 遗憾的是,没有要检查的
socket.IsDisposed属性,因为IDisposable接口没有声明它。我总是将public bool IsDisposed { get; private set; }添加到我的一次性课程中,然后开始protected virtual void Dispose(bool) { if (IsDisposed) return; IsDisposed = true; ... }
标签: c# sockets objectdisposedexception