当前位置: 代码迷 >> Windows Mobile >> C#网络编程的有关问题~送分贴
  详细解决方案

C#网络编程的有关问题~送分贴

热度:22   发布时间:2016-04-25 07:26:02.0
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)


如果觉得回掉这样处理不优雅,那你就单独些一个类封装下count属性,socket对象,,,,
  相关解决方案