C#网络编程的问题~~~~送分贴
大家好,今天碰到一个网络编程的问题,
功能描述如下:
现有网络接收线程A,主要工作是用while循环不断发送数据给服务器,并同时从服务器接收数据,为了不阻塞该线程,我发送和接收都使用的是异步socket方式。主线程退出时候将完成socket清理操作.异步回调函数则是将socket对象传入后,分别做发送和接收数据操作
现有问题:
在线程A结束时候后,回调函数会引发异常,主要提示是socket对象被释放,我分析原因在于主线程结束后,socket操作清理完成,但是此时回调线程没有停止,导致使用到了已经释放的socket对象,此时我该如何操作才能保证我A线程进行socket清理操作时候,发送和接收的异步回调都已经完成?
[解决办法]
在回掉里面清理呗,,,
[解决办法]
需求:你需要在回掉函数结束时才清理。
其实你可以利用lambda捕获局部变量的特性偷懒一下,
Int32 count = 0;
//其他逻辑
//异步发送数据
// 设置为非阻塞模式;
Socket socket =null;//异步发送数据;
SocketAsyncEventArgs sende = new SocketAsyncEventArgs();
sende.Completed += (s1, e1) => {
count++;
if (count==2)
{
//清理
socket.Dispose();
}
};
socket.SendAsync();
////异步接收数据
//socket异步接收数据;
//接受和上面用同样的方式(s1, e1)