以下はそれの簡単な実装について
Thread.Sleep()を使うのが一番簡単なのだが、スレッド自体が止まるのでUIも固まってしまう
(逆にこれを許容するならばThread.Sleep()でよい)
UIとキー入力部分を別スレッドにすればよいのだがこれもなかなか面倒くさい
以下のコードはThread.Sleep()の代わりに用いるスリープ用処理の抜粋
Timerクラスを用いて指定された時間だけ待つ
この間Application.DoEvents()メソッドを呼び続けることでUIが固まることを防ぐ
スリープの精度はイマイチだと思うが今回の用途には問題ないものとした
static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); static bool timerEndFlag = false; //フォームのロード時にイベントハンドラを仕込んでおく private void FormLoad(object sender, EventArgs e) { //… myTimer.Tick += new EventHandler(TimerEventProcessor); //… } private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs) { myTimer.Stop(); timerEndFlag = true; } //Thread.Sleep()の代わりに使用 private void sleep(int msec) { if (msec <= 0) msec = 1; myTimer.Interval = msec; timerEndFlag = false; myTimer.Start(); // Runs the timer, and raises the event. while (timerEndFlag == false) { Application.DoEvents(); } }
0 件のコメント:
コメントを投稿