猿问

怎么能让下面的内容执行完毕,线程才启动呢?

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的方法。

大话西游666
浏览 94回答 1
1回答

蛊毒传说

做一个bool变量,用来标记是否需要启动后面的线程。初始值=false,当接收到符合条件的数据后再赋值为true。启动线程前,判断变量=true才能启动线程。
随时随地看视频慕课网APP
我要回答