C# 如何在C中延迟任务中部分代码的执行#
我有这个方法,我需要暂停一段时间。 这就是我所尝试的:C# 如何在C中延迟任务中部分代码的执行#,c#,wpf,multithreading,C#,Wpf,Multithreading,我有这个方法,我需要暂停一段时间。 这就是我所尝试的: private async void btnStart_Click(object sender, RoutedEventArgs e) { await Task.Run(() => { this.Dispatcher.Invoke((Action)(() => { NewGame();
private async void btnStart_Click(object sender, RoutedEventArgs e)
{
await Task.Run(() =>
{
this.Dispatcher.Invoke((Action)(() =>
{
NewGame();
// Game Loop
for (int i = 0; i < 35; i++)
{
int index = _random.Next(0, _numbersInGame.Count);
int number = _numbersInGame.ToArray()[index];
lblCurrentNumber.Content = number.ToString();
Task.Delay(1000).Wait(); // I want to add pause here
(this.FindName($"lblNum{i + 1}") as Label).Content = number.ToString();
lblCurrentNumber.Content = "";
_numbersInGame.RemoveAt(index);
}
}));
});
}
private async void btnStart\u单击(对象发送方,路由目标)
{
等待任务。运行(()=>
{
this.Dispatcher.Invoke((操作)(()=>
{
新游戏();
//游戏循环
对于(int i=0;i<35;i++)
{
int index=_random.Next(0,_numbersInGame.Count);
整数=_numbersInGame.ToArray()[index];
lblCurrentNumber.Content=number.ToString();
Task.Delay(1000).Wait();//我想在这里添加暂停
(this.FindName($“lblNum{i+1}”)作为标签);
lblCurrentNumber.Content=“”;
_编号名称移除(索引);
}
}));
});
}
欢迎任何帮助。
谢谢
task.Run
)Invoke
封送回UI线程等待任务。延迟而不阻塞UI
private async void btnStart_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 35; i++)
{
NewGame();
int index = _random.Next(0, _numbersInGame.Count);
int number = _numbersInGame.ToArray()[index];
lblCurrentNumber.Content = number.ToString();
await Task.Delay(100);
(this.FindName($"lblNum{i + 1}") as Label).Content = number.ToString();
lblCurrentNumber.Content = "";
_numbersInGame.RemoveAt(index);
}
}
private async void btnStart\u单击(对象发送方,路由目标)
{
对于(int i=0;i<35;i++)
{
新游戏();
int index=_random.Next(0,_numbersInGame.Count);
整数=_numbersInGame.ToArray()[index];
lblCurrentNumber.Content=number.ToString();
等待任务。延迟(100);
(this.FindName($“lblNum{i+1}”)作为标签);
lblCurrentNumber.Content=“”;
_编号名称移除(索引);
}
}
像这样使用async和Wait模式可以安全地更新UI,因为续集将发布回UI上下文。它还允许消息泵/调度器继续不减弱,直到等待的延迟完成
最后,您可能希望使用标志或类似标志保护此方法不受双击的影响(因为ui可以自由重新输入)
task.Run
)Invoke
封送回UI线程等待任务。延迟而不阻塞UI
private async void btnStart_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 35; i++)
{
NewGame();
int index = _random.Next(0, _numbersInGame.Count);
int number = _numbersInGame.ToArray()[index];
lblCurrentNumber.Content = number.ToString();
await Task.Delay(100);
(this.FindName($"lblNum{i + 1}") as Label).Content = number.ToString();
lblCurrentNumber.Content = "";
_numbersInGame.RemoveAt(index);
}
}
private async void btnStart\u单击(对象发送方,路由目标)
{
对于(int i=0;i<35;i++)
{
新游戏();
int index=_random.Next(0,_numbersInGame.Count);
整数=_numbersInGame.ToArray()[index];
lblCurrentNumber.Content=number.ToString();
等待任务。延迟(100);
(this.FindName($“lblNum{i+1}”)作为标签);
lblCurrentNumber.Content=“”;
_编号名称移除(索引);
}
}
像这样使用async和Wait模式可以安全地更新UI,因为续集将发布回UI上下文。它还允许消息泵/调度器继续不减弱,直到等待的延迟完成
最后,您可能希望保护此方法不受带有标志或类似内容的双击的影响(因为ui可以自由重新输入)4分钟后,我将能够将您的答案标记为正确的解决方案。4分钟后,我将能够将您的答案标记为正确的解决方案。