[英]Thread.Sleep replacement in .NET for Windows Store
Windows Store應用程序的.NET中似乎不支持Thread.Sleep 。
例如這個
System.Threading.Thread.Sleep(1000);
面向任何.NET Framework(2.0、3.5、4.0、4.5)時將編譯,而針對Windows Store應用程序(或面向4.5和商店的可移植類庫)面向.NET時將不會編譯。
System.Threading.Thread仍然存在,只是沒有Sleep方法。
我需要在應用程序中延遲幾秒鍾,是否有合適的替代品?
編輯為什么需要延遲:我的應用是游戲,延遲是使它看起來像計算機對手在“思考”他的下一步行動。 該方法已經被異步調用(沒有阻塞主線程),我只想減慢響應時間。
Windows應用商店應用程序具有異步性Task.Delay
提供了“異步暫停”。 因此,在異步方法中,您將編寫:
await Task.Delay(TimeSpan.FromSeconds(30));
...或您想要的任何延遲。 異步方法將在30秒后繼續,但是不會像所有await
表達式一樣阻塞線程。
討厭表述明顯,但萬一有人要一行System.Threading.Tasks.Task.Delay(3000).Wait()
我遇到了同樣的問題,並找到了另一個我想與您分享的有趣的解決方案。 如果您真的想阻塞線程,我會這樣做(感謝@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!
}
幾乎沒有理由(出於測試目的)永遠不要使用Thread.Sleep()
。
如果(且僅當)您有充分的理由將線程發送到睡眠狀態,則可能要檢查Task.Delay()
,您可以在指定的時間內等待“等待”。 雖然讓線程無所事事絕不是一個好主意。 壞習慣...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.