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

蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
做一個bool變量,用來標記是否需要啟動后面的線程。初始值=false,當接收到符合條件的數據后再賦值為true。啟動線程前,判斷變量=true才能啟動線程。
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消