例如,这个
System.Threading.Thread.Sleep(1000);
将在针对任何.NET Framework(2.0,3.5,4.0,4.5)进行编译时进行编译,但在针对Windows应用商店应用的.NET(或者同时针对4.5和存储的可移植类库)中时不会编译。
System.Threading.Thread仍然存在,它只是没有Sleep方法。
我需要在我的应用中延迟几秒钟,是否有合适的替代品?
编辑为什么需要延迟:我的应用程序是一个游戏,延迟是让它看起来像计算机对手正在“思考”他的下一步行动。该方法已被异步调用(主线程未被阻止),我只想减慢响应时间。
答案 0 :(得分:201)
Windows应用商店应用程序包含异步 - Task.Delay
提供“异步暂停”。所以在异步方法中,你要写:
await Task.Delay(TimeSpan.FromSeconds(30));
......或者你想要的任何延迟。异步方法将在30秒后继续,但线程将不被阻止,就像所有await
表达式一样。
答案 1 :(得分:45)
讨厌陈述显而易见的情况,但万一有人想要一行System.Threading.Tasks.Task.Delay(3000).Wait()
答案 2 :(得分:19)
我遇到了同样的问题,并找到了另一个有趣的解决方案,我希望与您分享。如果你真的想阻止这个线程,我会这样做(感谢@Brannon的“苗条”提示):
// `waitHandle.Set` is never called, so we wait always until the timeout occurs
using (var waitHandle = new ManualResetEventSlim(initialState: false))
{
waitHandle.Wait(TimeSpan.FromSeconds(5));
}
答案 3 :(得分:11)
<强> MainPage.xaml.cs中强>
public MainPage()
{
this.InitializeComponent();
this.WaitForFiveSeconds();
}
private async void WaitForFiveSeconds()
{
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(5));
// do something after 5 seconds!
}
答案 4 :(得分:-7)
使用Thread.Sleep()
几乎没有理由(测试目的除外)。
IF(并且仅当)您有充分的理由将线程发送到休眠状态时,您可能需要检查Task.Delay()
,您可以等待“等待”指定的时间。虽然让一个线程坐在那里什么都不做也不是一个好主意。糟糕的做法......