C#/WPF 如何在循环之间等待但仍允许用户单击按钮(不需要)

C#/WPF How to wait between loops but still allow user button click (not required)

我正在创建一个纸牌游戏 Slap Jack,它有 1 个用户和 3 个计算机 "players"。当用户点击翻牌按钮时,计算机会一张一张地翻牌。

我正在努力解决如何让计算机 运行 延迟执行之间的问题。我现在有一个模拟计算机翻转的功能,但延迟仅适用于第一次翻转,因为其他两个紧随其后。这是我目前使用的代码:

        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 class 但那是在创建第二个线程并且没有按我需要的那样工作。我在这里做错了什么或者有更好的方法吗?

编辑: 我想我意识到 DispatcherTimer 是怎么错的,因为它执行 foreach 循环下面的剩余代码,然后等待计时器结束。

我能够通过使函数异步并使用 await Task.Delay(2000); 而根本不使用计时器来解决这个问题