Я начинаю OOP и C#.Как правильно приостановить/задержать приложение Windows Forms
Я работаю над викториной с использованием Windows Forms. Моя проблема связана с двумя классами: Форма и логика игры. У меня есть базовый интерфейс с классическими элементами управления Froms. Взглянуть.
То, что я хочу добиться того, когда игрок нажимает любую кнопку ответа, он будет higlight, что нажата кнопка красным или зеленым цветом, в зависимости от того, правильно ли это или неправильного ответа. После изменения цвета я хочу, чтобы программа подождала некоторое время, а затем переходите к следующему вопросу.
Probelm - это то, что я не знаю, как добиться этого правильно. Я не знаю, как работать с потоками и как работает приложение Form, связанное с потоками. Должен ли я использовать спящий поток или таймер или асинхронный режим?
Я покажу вам метод в игровом классе, который должен справиться с этим.
public static void Play(char answer) //Method gets a char representing a palyer answer
{
if (_rightAnswer == answer) //If the answer is true, the button should become green
{
Program.MainWindow.ChangeBtnColor(answer, System.Drawing.Color.LightGreen);
_score++;
}
else //Otherwise the button becomes Red
{
Program.MainWindow.ChangeBtnColor(answer, System.Drawing.Color.Red);
}
//SLEEP HERE
if (!(_currentIndex < _maxIndex)) //If it is the last question, show game over
{
Program.MainWindow.DisplayGameOver(_score);
}
else //If it is not the last question, load next question and dispaly it and finally change the button color to default
{
_currentIndex++;
_currentQuestion = Database.ListOfQuestions.ElementAt(_currentIndex);
_rightAnswer = _currentQuestion.RightAnswer;
Program.MainWindow.DisplayStats(_score, _currentIndex + 1, _maxIndex + 1);
Program.MainWindow.DisplayQuestion(_currentQuestion.Text);
Program.MainWindow.DisplayChoices(_currentQuestion.Choices);
}
Program.MainWindow.ChangeBtnColor(answer, System.Drawing.SystemColors.ControlLight);
}
Я не хочу, чтобы полностью блокировать пользовательский интерфейс, но и я не хочу, чтобы пользователи других событий, нажимая на другие кнопки во время паузы. Потому что это приведет к неправильному запуску приложения.
Это заблокирует пользовательский интерфейс. – ChrisF
[Thread.Sleep] (https://msdn.microsoft.com/en-us/library/d00bd51t.aspx) таймаут измеряется в миллисекундах, а не в наносекундах. Очень большая разница. –