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