首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

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

2013-03-26 
C#网络编程的问题~~~~送分贴大家好,今天碰到一个网络编程的问题,功能描述如下:现有网络接收线程A,主要工作

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对象,,,,

热点排行