C# 如何实现时间延迟?
我现在编程已经3周了,所以我试着制作一个记忆游戏。 除了延迟外,一切正常。我尝试了许多不同的选项,但不知何故,延迟出现在C# 如何实现时间延迟?,c#,timer,delay,wait,sleep,C#,Timer,Delay,Wait,Sleep,我现在编程已经3周了,所以我试着制作一个记忆游戏。 除了延迟外,一切正常。我尝试了许多不同的选项,但不知何故,延迟出现在按钮\u单击事件的末尾 如果我单击第一个按钮,它会更改内容,但当我单击第二个按钮时 按钮无论触发哪个语句,第二张卡都不会显示。代码工作正常,直到事件结束,然后发生3秒的延迟 我想实现的是,你可以在短时间内看到第二张牌 在两张牌都翻过来或消失之前 附言-如果我在“延迟”之后添加一个消息框,它似乎会起作用 但这不是我的目标,所以有没有像等待同步或我错过了什么 代码: 让我们简化代码
按钮\u单击事件的末尾
如果我单击第一个按钮,它会更改内容,但当我单击第二个按钮时
按钮无论触发哪个语句,第二张卡都不会显示。代码工作正常,直到事件结束,然后发生3秒的延迟
我想实现的是,你可以在短时间内看到第二张牌
在两张牌都翻过来或消失之前
附言-如果我在“延迟”之后添加一个消息框
,它似乎会起作用
但这不是我的目标,所以有没有像等待同步或我错过了什么
代码:
让我们简化代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
button.Content = "START" //change content
new System.Threading.ManualResetEvent(false).WaitOne(3000); //wait for 3sec
button.Content = "FINISH" //change content
}
这样,您就有了以下时间线:
您设置内容(但不查看/感受内容)
你开始等3秒钟
你等了3秒钟就结束了
您设置内容(但不查看/感受内容)
您可以退出按钮,单击方法
你实际上看到/感觉到了内容的变化
正如您所看到的,内容更改(在item1和item4)并不是立即发生的,而是在很久以后发生的;这是因为UI线程在执行按钮\u Click
方法时被阻塞,因此无法刷新图形。
为了实现您的目标,您有两个选择:
- 使用
async/await
:
- 使用
调度程序
:
使用计时器-在需要时启动和停止它。查找任务。延迟
我建议阅读有关游戏编程的内容。其想法是在游戏中编程一些时钟,它将“一个时间间隔过去”向对象发送消息。然后,对象可以检查内部状态,如果是“时间”,则可以执行某些操作。你可以查一下,也可以查一下。但是,您可以使用简单的等待N毫秒
MessageBox.Show("x");
new System.Threading.ManualResetEvent(false).WaitOne(3000);
private void Button_Click(object sender, RoutedEventArgs e)
{
button.Content = "START" //change content
new System.Threading.ManualResetEvent(false).WaitOne(3000); //wait for 3sec
button.Content = "FINISH" //change content
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
button.Content = "START" //change content
await Task.Delay(3000); //wait for 3sec asynchronously
button.Content = "FINISH" //change content
}
private void Button_Click(object sender, RoutedEventArgs e)
{
new Thread(() =>
{
Dispatcher.Invoke(() => button.Content = "START");
System.Threading.Thread.Sleep(3000);
Dispatcher.Invoke(() => button.Content = "FINISH");
}).Start();
}