send(client, "Getinfo", "Getinfo"); //发送获取用户信息的请求(登陆过程在上一个窗体完成了,暂存在服务端)
string mark = "";
string info = read(out mark); //读取服务端回传的信息和标记(mark)<-这里用的是同步读取
MessageBox.Show("Get info("+info+","+mark+")");
if (mark == "INFO")
{
string[] infos = info.Split('_');
MyNick = infos[0];
label2.Text = infos[0];
label3.Text = infos[1];
Tray("VICQ(" + MyNick + ")", VelClient.Properties.Resources._20150726114602183_easyicon_net_32);
MessageBox.Show("Tray setting done");
}
ThreadPool.QueueUserWorkItem(new WaitCallback(GetMsg));//这里是设定一个线程,无限循环读取用户列表和信息等。用户列表是服务器每3秒向所有客户端发布一次的。
MessageBox.Show("Working start");
现在问题是按理说上面的read是同步读取,没有读取到内容就会卡在那里不动直到读取到内容,但是实际运行时,却因网络延迟,导致上面的read没有读取到info下面的线程就开始了,结果获取到的标记是USERLIST而不是INFO,怎么能让上面的执行完毕,下面的线程才启动呢?
注:我想尽可能采用等待的方法,不想用循环判断直到某个条件达成在break的方法。
蛊毒传说
相关分类