.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秒后继续,但线程不会被阻塞,就像所有await
expression式一样。
讨厌陈述明显,但在任何人想要一个单一的行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()
,你可以等待一个指定的时间“等待”。 虽然有一个线程坐在一起,什么都不做是一个好主意。 不好的做法…
- TargetedPatchingOptOut:“在NGen图像边界上内联的性能至关重要”?
- 解压缩来自WebClient的gzip响应
- 一个优雅的方式来消费(BinaryReader的所有字节)?
- DateTime vs DateTimeOffset
- “Type not expected”,使用DataContractSerializer – 但它只是一个简单的类,没有有趣的东西?
- 如何获得.NET(C#)中的UserControl的HTML输出?
- LINQ:没有任何与所有不
- 如何使Authorize属性返回自定义403错误页面而不是redirect到login页面
- 如何从asp.net中使用c#中的查询string中删除项目?