C# でフリーズさせずにスリープする最も簡単な方法は Task.Delay()
Visual Studio 2013 を使用。
「C# sleep」などで検索すると、 System.Threading.Thread.Sleep()が出てくる。
そして、System.Threading.Thread.Sleep() を Windowsフォームアプリケーションで普通に書くと、 スリープの間、フリーズしてしまう。
これはGUIスレッドでスリープさせているため、 ユーザの操作を受け付けられないからである。
回避するためには別スレッドで非同期にスリープさせれば良いのだが、 スリープ後にGUIスレッド上のコントロールを操作する必要がある場合は 非常にややこしくなる。
しかし、Visual Studio 2012 以降は Taskやasync/awaitが導入され、非同期処理が非常に簡単に書けるようになった。
Task.Delay() を使うことで、 以下のように簡単にGUIスレッドをフリーズさせないスリープができる。
private async void sleepAsync() { await Task.Delay(5 * 1000); }
ミリ秒でスリープ時間を指定する。
await で待つ必要があるので、Task.Delay() を使う関数は async を付けておく。