System.Threading.Thread.Sleep() を用いてSleep処理を行うと、アプリケーションがフリーズしてしまう。
別スレッドを作成し、Joinで終了を待つことで回避することもできるが、制約が多い。
// using System.Threading;
protected override void main()
{
Thread objThread = new Thread(new ParameterizedThreadStart(ThredSleep));
objThread.Start(5000);
objThread.Join();
MessageBox.Show("OK");
}
/// <summary>
/// 待機処理
/// </summary>
/// <param name="millisecondsTimeout">
/// スリープするミリ秒
/// ParameterizedThreadStartの制約上、object型である必要がある。
/// </param>
private void ThredSleep(object millisecondsTimeout)
{
Thread.Sleep((int)millisecondsTimeout);
async/awaitを用いてSleep処理を行うこと下記のようになる。
protected override async void main()
{
await AsyncSleep(5000);
MessageBox.Show("OK");
}
/// <summary>
/// 待機処理
/// </summary>
/// <param name="millisecondsTimeout">スリープするミリ秒</param>
private async Task AsyncSleep(int millisecondsTimeout)
{
await Task.Delay(millisecondsTimeout);
}