Thread.Sleep replacement in .NET for Windows Store



Thread.Sleep 似乎在 Windows 应用商店应用程序的 .NET 中不受支持。

例如,这个

System.Threading.Thread.Sleep(1000);

当面向任何 .NET 框架(2.0、3.5、4.0、4.5)时将进行编译,但在面向 Windows 应用商店应用的 .NET 时(或在面向 4.5 和应用商店的可移植类库中)时,不会进行编译。

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(),您可以等待"等待"指定的时间。尽管让一个线程坐在那里什么都不做从来都不是一个好主意。不好的做法...

最新更新