C#/WPF Как ждать между циклами, но разрешать нажатие кнопки пользователя (не обязательно)
Я создаю карточную игру Slap Jack, в которой есть 1 пользователь и 3 компьютера. Когда пользователь нажимает кнопку, чтобы перевернуть карту, компьютеры будут работать один за другим, а также переворачивать карту.
Я борюсь с тем, как заставить компьютеры работать с задержкой между их выполнением. У меня сейчас есть функция, которая имитирует переворот компьютеров, но задержка работает только для первого переворота, так как два других сразу после этого. Это код, который у меня работает до сих пор:
foreach (var player in Players.Where(a => a.IsComputer()))
{
_player = player;
_dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
_dispatcherTimer.Tick += new EventHandler(OnTimedEvent);
_dispatcherTimer.Interval = new TimeSpan(0, 0, 2);
_dispatcherTimer.Start();
}
Где OntimedEvent - это функция, которая обрабатывает переворачивание компьютера, а также останавливает dispatcherTimer (который является глобальным полем), а _player - активный игрок. Как я уже сказал, это делает паузу для первой итерации цикла foreach, но не делает паузу для второй или третьей. Я также пытался использовать класс System.Timer, но это создавало второй поток и не работало так, как мне было нужно. Здесь я что-то не так делаю или есть лучший способ сделать это?
РЕДАКТИРОВАТЬ: Я думаю, что я понимаю, как DispatcherTimer не так, как он выполняет оставшийся код ниже цикла foreach, а затем ждет истечения таймера.
1 ответ
Я смог решить эту проблему, сделав функцию асинхронной и используя await Task.Delay(2000);
и не используя таймер вообще