2013-07-21 2 views
2

Я делаю игру wumpus world в winforms, в которой агент (компьютер) может перемещаться в 4 направлениях. Я использую управление кнопки для базы и показываю и скрываю изображения там, где это необходимо. я использовал Thread.Sleep для этого, но проблема в том, что когда я нажимаю кнопку, ничего не отображается в форме. процесс на фоне работает нормально, но он не показывает каждый шаг. и да, я использую Thread.Sleep в текущем UI Тема.
Я хочу показать каждый шаг пользователям с интервалом в 2 секунды.Thread.Sleep или Timer для отображения каждого шага

+0

Вы используете 'Thread.Sleep' на текущем потоке пользовательского интерфейса? – gunr2171

ответ

3

сложно ответить без какого-либо кода, но главная проблема, поскольку я понимаю, что вы меняете внешний вид мира, а затем говорите ему, чтобы спать, ведьма означает, что ничего не будет нарисовано. а затем, когда поток просыпается, вы снова меняете мир и засыпаете. Ничто так не будет написано.

Лучшим способом сделать это будет таймер, сделать его одним таймером и очередью событий, которые необходимо было показать, и вы на пути к этому.

вы работаете на WinForms, потому что если вы работаете на WPF вы можете сделать гораздо приятнее вещи

Edit: Я не говорю, что таймер это лучший способ сделать это, но это хорошо действительный способ

4

Использование Thread.Sleep плохой выбор дизайна по нескольким причинам:

  1. он блокирует поток на протяжении времени он спит.
  2. Он использует потоки в пуле потоков, поэтому это решение не будет хорошо масштабироваться.
  3. Это плохой механизм синхронизации, потому что в игре есть временной срез или квант, который варьируется между операционными системами и даже версиями одной и той же операционной системы (read: Windows).

Это предыдущий вопрос SO дает больше информации о том, почему Thread.Sleep плохо:

Why Is Thread.Sleep So Harmful

Смежные вопросы