C # / WPF Как ждать между циклами, но разрешать нажатие кнопки пользователя (не обязательно) - PullRequest
0 голосов
/ 13 февраля 2019

Я создаю карточную игру 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 Ответ

0 голосов
/ 13 февраля 2019

Я смог решить эту проблему, сделав функцию асинхронной и используя await Task.Delay(2000); и вообще не используя таймер

...