У меня клиент-серверное приложение, викторина.На этом этапе у каждого клиента есть определенное количество времени для ответа на вопрос.Если он отвечает на вопрос, он получает правильный ответ и переходит к следующему вопросу.Если клиент не смог ответить, таймер заканчивается, и клиенту предоставляется правильный ответ (как и раньше), и он продолжает работу.
Моя проблема заключается в том, что таймер истекает, а затем идет дальше.Если программа ожидает поток, клиент не может использовать пользовательский интерфейс, и если я не жду поток, программа просто пропустит и продолжит.
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, когда игра закончилась, а также устанавливает интерфейс пользователя (меняет метки и т. д.)
«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. Чтобы менеджер смотрелкаждый раз, когда заканчивается таймер 2. Делайте это так, чтобы не блокировать пользовательский интерфейс.
Заранее спасибо, Энтон.
РЕДАКТИРОВАТЬ :::: Есть ли способ, которым яможно вызвать менеджера из другого потока?!?!?это решит мою проблему!