.NET中的Windows应用程序中的Thread.Sleepreplace

Thread.Sleep似乎不支持.NET应用程序的Windowsapp store。

例如,这个

System.Threading.Thread.Sleep(1000); 

将针对任何.NET Framework(2.0,3.5,4.0,4.5)进行编译,但在针对Windowsapp store的.NET(或者以兼容4.5和商店的可移植类库)为目标时,则不会进行编译。

System.Threading.Thread仍然存在,它只是没有睡眠的方法。

我需要在我的应用程序中延迟几秒钟,是否有合适的replace?

编辑为什么需要延迟:我的应用程序是一个游戏,延迟是看起来像电脑对手是“思考”他的下一步行动。 该方法已被asynchronous调用(主线程不被阻塞),我只是想减慢响应时间。

Windows Store应用程序包含asynchronous – Task.Delay提供“asynchronous暂停”。 所以在一个asynchronous方法中,你可以这样写:

 await Task.Delay(TimeSpan.FromSeconds(30)); 

…或任何你想要的延迟。 asynchronous方法将在30秒后继续,但线程不会被阻塞,就像所有awaitexpression式一样。

讨厌陈述明显,但在任何人想要一个单一的行System.Threading.Tasks.Task.Delay(3000).Wait()

我刚刚遇到了同样的问题,并find了另一个我想与你分享的有趣解决scheme。 如果你真的想阻止线程,我会这样做(谢谢@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)); } 

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! } 

几乎没有任何理由(除了testing目的)永远使用Thread.Sleep()

如果(并且只有)你有一个非常好的理由来发送一个线程进入睡眠状态,你可能需要检查Task.Delay() ,你可以等待一个指定的时间“等待”。 虽然有一个线程坐在一起,什么都不做是一个好主意。 不好的做法…