Я делаю игру wumpus world в winforms, в которой агент (компьютер) может перемещаться в 4 направлениях. Я использую управление кнопки для базы и показываю и скрываю изображения там, где это необходимо. я использовал Thread.Sleep для этого, но проблема в том, что когда я нажимаю кнопку, ничего не отображается в форме. процесс на фоне работает нормально, но он не показывает каждый шаг. и да, я использую Thread.Sleep
в текущем UI
Тема.
Я хочу показать каждый шаг пользователям с интервалом в 2 секунды.Thread.Sleep или Timer для отображения каждого шага
ответ
сложно ответить без какого-либо кода, но главная проблема, поскольку я понимаю, что вы меняете внешний вид мира, а затем говорите ему, чтобы спать, ведьма означает, что ничего не будет нарисовано. а затем, когда поток просыпается, вы снова меняете мир и засыпаете. Ничто так не будет написано.
Лучшим способом сделать это будет таймер, сделать его одним таймером и очередью событий, которые необходимо было показать, и вы на пути к этому.
вы работаете на WinForms, потому что если вы работаете на WPF вы можете сделать гораздо приятнее вещи
Edit: Я не говорю, что таймер это лучший способ сделать это, но это хорошо действительный способ
Использование Thread.Sleep плохой выбор дизайна по нескольким причинам:
- он блокирует поток на протяжении времени он спит.
- Он использует потоки в пуле потоков, поэтому это решение не будет хорошо масштабироваться.
- Это плохой механизм синхронизации, потому что в игре есть временной срез или квант, который варьируется между операционными системами и даже версиями одной и той же операционной системы (read: Windows).
Это предыдущий вопрос SO дает больше информации о том, почему Thread.Sleep плохо:
- 1. java timer и thread.sleep
- 2. Параллельный для каждого с Thread.Sleep
- 3. Должен ли я использовать thread.sleep или timer в моем коде?
- 4. Использование Thread.Sleep или Timer в роли рабочего Azure в .NET?
- 5. Отправка каждого шага
- 6. Thread.Sleep() или while()?
- 7. Отображение каждого шага геокодирования направлений
- 8. Android Timer/Handler/Thread.sleep() с выключенным экраном не работает правильно
- 9. для отображения или не отображения
- 10. Application.Wait или Thread.Sleep
- 11. Лучший способ отображения времени в Android Timer
- 12. Альтернатива Thread.Sleep в окнах Форма, отличная от Timer
- 13. Java timer - выполнить задачу, подождать, выполнить задачу. Нет Thread.sleep()
- 14. while loop или Thread.sleep()?
- 15. C# Таймер или Thread.Sleep
- 16. Django form wizard - настраиваемая форма для каждого шага
- 17. Получение каждого шага от расстояния Левенштейна
- 18. PHP или Javascript Timer?
- 19. CucumberJS: Сделайте снимок экрана после каждого шага
- 20. Наследование, что происходит после каждого шага
- 21. Java Thread.sleep long или int?
- 22. Проверка значение ошибки после каждого шага
- 23. Bootstrap Tour удаляет выделенный элемент каждого шага
- 24. Поиск времени выполнения каждого шага этапа искры
- 25. tensorflow cifar10 пример выходной формы каждого шага
- 26. значения печати после каждого 1000 шага
- 27. Обновление bootstrap datetimepicker после каждого шага/щелчок
- 28. Вывод сообщений после каждого шага выполнения кода
- 29. Десять раз Thread.Sleep (100) или один Thread.Sleep (1000)?
- 30. Thread.sleep зовущего Thread.sleep
Вы используете 'Thread.Sleep' на текущем потоке пользовательского интерфейса? – gunr2171