如何在 C# 中为命令创建延迟?

How to create a delay for a command in c#?

我想在我的 c# 游戏应用程序中插入延迟以更改按钮颜色 2000 毫秒...我应该使用什么命令? (我想改变按钮的颜色 2 秒,然后恢复正常状态)谢谢

        switch (colorNum)
        {
            case 1:
                btnRed.BackColor = Color.Red

                btnRed.BackColor = Color.LightCoral;
                firedColors[count] = "Red";
                count++;
                break;
            case 2:
                btnBlue.BackColor = Color.Blue;

                btnRed.BackColor = Color.LightBlue;
                firedColors[count] = "Blue";
                count++;
                break;
            case 3:
                btnYellow.BackColor = Color.Gold;

                btnYellow.BackColor = Color.LightYellow;
                firedColors[count] = "Yellow";
                count++;
                break;
        }

这是您可以使用 async - await 实现的一种方法:

using System.Threading.Tasks;

async void YourFunction()   // <--- Use "async" keyword
{
    switch (colorNum)
    {
        case 1:
            btnRed.BackColor = Color.Red;
            await Task.Delay(2000);
            btnRed.BackColor = Color.LightCoral;
            firedColors[count] = "Red";
            count++;
            break;
        case 2:
            btnBlue.BackColor = Color.Blue;
            await Task.Delay(2000);
            btnRed.BackColor = Color.LightBlue;
            firedColors[count] = "Blue";
            count++;
            break;
        case 3:
            btnYellow.BackColor = Color.Gold;
            await Task.Delay(2000);
            btnYellow.BackColor = Color.LightYellow;
            firedColors[count] = "Yellow";
            count++;
            break;
    }
}

注意:此代码使用.Net 4.5及以上版本。

使用 Timer 来管理颜色更改过程,如果您不打算经常更改颜色,则在每次更改后将其丢弃。因为你没有提到你要在哪里改变颜色,我把代码放在 Button.

private Color _originalColor = Color.LightGray;
private Color _newColor = Color.LightSkyBlue;
private bool _isOrigColor = true;
Timer _tmrChangeColor;

private void btnTest_Click(object sender, EventArgs e)
{
    if (_tmrChangeColor != null) return;
    _tmrChangeColor = new Timer {Interval = 2000, Enabled = true};
    _tmrChangeColor.Tick += _tmrChangeColor_Tick;
}

void _tmrChangeColor_Tick(object sender, EventArgs e)
{
    btnTest.BackColor = _isOrigColor ? _newColor : _originalColor;
    _isOrigColor = !_isOrigColor;
    _tmrChangeColor.Dispose();
    _tmrChangeColor = null;
}