【问题标题】:How to create a delay for a command in c#?如何在 C# 中为命令创建延迟?
【发布时间】:2023-04-01 07:41:02
【问题描述】:

我想在 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;
        }

【问题讨论】:

  • 你可以使用Thread.Sleep,例如Thread.Sleep(1000)增加1秒延迟。
  • 它挂出程序...我不知道为什么??!!!
  • 没错,它会挂起 UI 线程。我昨天回答了类似的问题here 遵循该建议。

标签: c# time timer delay period


【解决方案1】:

这是使用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 及以上版本。

【讨论】:

    【解决方案2】:

    使用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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多