使用SocketAsyncEventArgs进行异步发送。有一个字节队列,来缓存要发送的数据。开启了一个新的线程,不断将字节队列里面的数据使用SocketAsyncEventArgs,以异步的方法发送出去。现在的问题是:如何在异步发送后阻止发送线程,以等待异步发送完的回调方法。_Socket.SendAsync(_SendAsyncArgs);//执行完这个方法后,需要阻止一下,等待这个方法的执行:
private void _SendAsyncArgs_Completed(object sender, SocketAsyncEventArgs e){}//这个方法执行完毕后,使发送线程继续发送。我不知道用什么停比较好呀,
还有,字节队列在发送的时候想全部取出来,这个时候要加个锁,防止其他字节进队,这个锁用什么比较好呢?
我贴了一张流程图图,网址是这个:
http://i810.photobucket.com/albums/zz23/gezhonglunta/49a43eaa.jpg

解决方案 »

  1.   


            object objLock = new object();//锁
            byte[] _bdate;//要发送的数据
            void Send()//发送
            {
                byte[] bdata;
                lock (objLock)
                {
                    //如果发送全部成功
                    if (_Socket.SendAsync(_SendAsyncArgs))
                    { 
                        //清理掉缓存区
                        _SendAsyncArgs.Clear();
                    }
                }
            }
            void Add()//添加缓存
            { 
                lock(objLock)
                {
                    //将数据加到缓存
                }
            }