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

C# 使用异步方式网络编程的有关问题 ~送分贴

2013-03-26 
C# 使用异步方式网络编程的问题 ~~~~送分贴大家好,今天碰到一个网络编程的问题,功能描述如下:现有网络接收

C# 使用异步方式网络编程的问题 ~~~~送分贴
大家好,今天碰到一个网络编程的问题,
功能描述如下:

现有网络接收线程A,主要工作是用while循环不断发送数据给服务器,并同时从服务器接收数据,为了不阻塞该线程,我发送和接收都使用的是异步socket方式。主线程退出时候将完成socket清理操作.异步回调函数则是将socket对象传入后,分别做发送和接收数据操作


现有问题:
在线程A结束时候后,回调函数会引发异常,主要提示是socket对象被释放,我分析原因在于主线程结束后,socket操作清理完成,但是此时回调线程没有停止,导致使用到了已经释放的socket对象,此时我该如何操作才能保证我A线程进行socket清理操作时候,发送和接收的异步回调都已经完成?
[解决办法]
异步回调时,可以先关闭线程,再关闭socket,这样就不会出现socket关闭后,再在background线程中被调用的情况,我之前碰到该问题,就是这么解决的
[解决办法]
用锁把它锁在外面,判断变量是否可用即可
virtual void Close(SocketAsyncEventArgs e)
        {
            lock (this)
            {
                if (e.AcceptSocket != null)
                {
                    e.AcceptSocket.Shutdown(SocketShutdown.Both);
                    e.AcceptSocket.Close();
                    e.AcceptSocket.Dispose();
                    e.AcceptSocket = null;
                }
            }
        }

热点排行