我有一个客户端服务器应用程序,一个琐事游戏。在此阶段,每个客户都有一定的时间来回答问题。如果他回答了问题,他将收到正确的答案,然后继续下一个问题。如果客户端无法回答,计时器将耗尽,并向客户端显示正确的答案(如前),然后继续前进。
我的问题是等待计时器用尽,然后继续前进。 如果程序正在等待线程,则客户端将无法使用UI;如果我不等待线程,则程序将跳过并继续。
public void Manager()
{
//Game ended
if (!setDisplay())//Displaying all the answers and question.
gameEnded();
else
startThread(); //Starting CountDown //Now the user can answer
}
这是主要部分。游戏结束时,“ setDisplay”返回false,并设置UI(更改标签等)
“ startThread”开始倒计时,用户可以从这一刻开始回答
Action Done = () =>
{
//when done
if (!currentLobby.hasAnswered)//time ran out.
{
currentLobby.hasAnswered = true;
submitAnswerThread();
}
};
public void startThread()
{
Thread t = new Thread(() => {
try
{
for (var i = currentLobby.lobby.lobby.timePerQuestion; i > 0 || currentLobby.hasAnswered; i--)//TimeOut or answered.
{
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(delegate ()
{
this.timerLabel.Content = i.ToString();//Change the label to display the correct time left.
}));
Thread.Sleep(1000);
}
}
finally
{
Done();
}
});
t.Start();
}
在此,线程完成后,它将检查用户是否已经回答,是否尚未回答,他将提交答案(TimeOut)。
我需要: 1.使Manager在每次计时器用尽时都得到照顾 2.以不会阻塞用户界面的方式进行操作。
提前感谢您,安通。
EDIT ::::有没有办法可以从另一个线程调用Manager?!?!? 这将解决我的问题!