99

Thread.Sleepは、Windows ストア アプリの .NET ではサポートされていないようです。

たとえば、これ

System.Threading.Thread.Sleep(1000);

.NET Framework (2.0、3.5、4.0、4.5) を対象とする場合はコンパイルされますが、Windows ストア アプリ (または 4.5 とストアの両方を対象とするポータブル クラス ライブラリ) の .NET を対象とする場合はコンパイルされません。

System.Threading.Thread はまだありますが、Sleep メソッドがありません。

アプリで何かを数秒間遅らせる必要があります。適切な代替品はありますか?

遅延が必要な理由を編集: 私のアプリはゲームであり、遅延は、コンピューターの対戦相手が次の動きについて「考えている」ように見せることです。メソッドは既に非同期で呼び出されています (メイン スレッドはブロックされていません)。応答時間を遅くしたいだけです。

4

5 に答える 5

203

Windows ストア アプリは非同期を採用しており、「非同期一時停止」は によって提供されTask.Delayます。したがって、非同期メソッド内では、次のように記述します。

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

...または任意の遅延。非同期メソッドは 30 秒後に続行されますが、すべての式と同様に、スレッドはブロックされません。await

于 2012-09-28T13:48:39.827 に答える
46

明白なことを言うのは嫌いですが、誰かが単一の行を望んでいる場合に備えてSystem.Threading.Tasks.Task.Delay(3000).Wait()

于 2014-11-03T19:23:16.660 に答える
20

私はちょうど同じ問題を抱えていて、あなたと共有したい別の興味深い解決策を見つけました. 本当にスレッドをブロックしたい場合は、次のようにします(「スリムな」ヒントを提供してくれた@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));
}
于 2013-05-04T12:29:47.223 に答える
11

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!
}
于 2012-10-08T20:41:30.233 に答える
-7

EVER を使用する理由は (テスト目的を除いて) ほとんどありませんThread.Sleep()

スレッドをスリープ状態にする非常に正当な理由がある場合 (およびその場合にのみ)、 を確認Task.Delay()して、指定された時間だけ「待機」することができます。ただし、スレッドを放置して何もしないことは決して良い考えではありません。悪い習慣...

于 2012-09-28T13:48:34.343 に答える