async/awaitを用いたSleep代替処理
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); }
ディスカッション
コメント一覧
まだ、コメントがありません