积极答复者
Socket 伪同步 AutoResetEvent 的问题

问题
-
程序有两个模块:收消息模块线程 、 连接服务器线程
///阻塞
private AutoResetEvent clientDone = new AutoResetEvent(false);
/// <summary>
/// 是否连接成功
/// </summary>
private bool isConnect = false;#region 接收消息模块
/// <summary>
/// 实时监听接收
/// </summary>
internal void ReceiveListener(){SocketAsyncEventArgs recargs = new SocketAsyncEventArgs();
while(running){
//接收消息
bool flag = socket.ReceiveAsync(recargs);
if(flag ){
recargs.Completed += new EventHandler<SocketAsyncEventArgs>(ReceiveBack);
clientDone.WaitOne();
}
}
}
internal void ReceiveBack(object sender, SocketAsyncEventArgs e){
if(e.SocketError == SocketError.Success){
isSend = true;
}clientDone.Set();
}
#region 连接服务器线程
/// <summary>
/// 连接服务器线程/// </summary>
internal bool ConnectListener(){//连接状态
isConnect = false;//定义并实例一个Socket参数
SocketAsyncEventArgs args = new SocketAsyncEventArgs();//设置到远程终节点属性(实际使用中,请将下面的Ip地址换成scoket服务器所在的IP)
args.RemoteEndPoint = endPoint;//设置好当Socket任何一个动作完成时的回调函数。
args.Completed += new EventHandler<SocketAsyncEventArgs>(ConnectBack);//执行连接。
socket.ConnectAsync(args);
clientDone.WaitOne();
return isConnect;}
internal void ConnectBack(object sender, SocketAsyncEventArgs e){
if(e.SocketError == SocketError.Success){
isConnect = true;}
clientDone.Set();
}
现在连接模块是30S调一次。
ConnectBack----> clientDone.Set();
程序直接执行ReceiveListener ---> clientDone.WaitOne();
ConnectListener 没在向下执行了
我的的需求是:ConnectBack----> clientDone.Set();后执行ConnectListener 的后续代码
ReceiveListener应该一直等待到ConnectListener 执行完才执行;