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); и не используя таймер вообще

Другие вопросы по тегам