簡體   English   中英

Windows Store中.NET中的Thread.Sleep替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM