Thread.Sleep は、Windowsストアアプリの.NETではサポートされていないようです。
たとえば、これ
System.Threading.Thread.Sleep(1000);
.NET Framework(2.0、3.5、4.0、4.5)を対象とする場合はコンパイルされますが、Windowsストアアプリ(または4.5とストアの両方を対象とするポータブルクラスライブラリ)を対象とする場合はコンパイルされません。
System.Threading.Threadはまだ存在し、Sleepメソッドがありません。
アプリで何かを数秒間遅らせる必要がありますが、適切な代替品はありますか?
遅延が必要な理由を編集します。私のアプリはゲームであり、コンピューターの相手が彼の次の動きを「考えている」ように見せることです。メソッドはすでに非同期で呼び出されています(メインスレッドはブロックされていません)。応答時間を遅くしたいだけです。
Windowsストアアプリは非同期性を取り入れており、「非同期ポーズ」は Task.Delay
によって提供されます。したがって、非同期メソッド内で次のように記述します。
await Task.Delay(TimeSpan.FromSeconds(30));
...またはあなたが望むどんな遅延。非同期メソッドは30秒後に続行しますが、すべてのawait
式と同様に、スレッドはnotブロックされます。
明白なことを述べるのは嫌いですが、だれかが1行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!
}