制御構文

[VB.NET] Sleepで指定した時間だけ処理を止める方法

今回は、VB.NETのSleepで指定した時間だけ処理を止める方法についてご紹介します。

Sleepメソッドとは

VB.NETでスレッドを一定時間停止させる方法として、System.Threading.Thread.Sleepがよく利用されます。

引数にはミリ秒単位の数値を指定し、その間だけ現在のスレッドの処理を一時停止します。

たとえば、Thread.Sleep(1000)であれば約1秒間スレッドが停止します。

Sleepメソッドの基本的な使い方

ここでは、コンソールアプリケーションでの基本的な使い方を確認します。

実行結果

処理開始
1秒経過
2秒経過し、処理終了

このように、処理の途中でThread.Sleepを呼び出すことで、意図的にプログラムの実行を遅らせることができます。

ただしメインスレッドが停止するため、その間にUIがある場合は応答がなくなる点に注意が必要です。

実用的な具体例

Windows Formsでの利用例

Windows Formsなどのユーザーインターフェース(UI)があるアプリケーションでThread.Sleepを使うと、UIスレッドが停止します。

以下の例では、ボタンをクリックするとUIが1秒間フリーズし、Labelにメッセージを表示します。

実行結果

処理中…
(1秒間のUIフリーズ)
1秒経過

UIフリーズを回避する例

重い処理や待機処理は、別スレッドで実行することでUIが固まるのを防げます。

以下は、新規のスレッドで待機処理を行った後、Invokeを使ってLabelを更新する例です。

実行結果

別スレッドで1秒待機後の処理

この例では、別スレッドで待機するため、UIのフリーズを回避しながらスレッドの停止を実装できます。

Sleepメソッドを使う際の注意点

主に以下の点を意識して利用すると、思わぬトラブルを防げます。

  • UIスレッドのフリーズ: メインスレッドでSleepを実行すると、UI操作を受け付けなくなります。
  • 停止時間の誤差: 指定した時間はあくまで最短停止時間の目安であり、システム負荷によって多少の誤差が発生する可能性があります。
  • デバッグ時の効率低下: 長いSleepはデバッグ効率を下げることがあります。
  • 非同期プログラミングの利用検討: 特にGUIアプリケーションでは、Async/AwaitTask.Delayの利用も選択肢に入ります。

まとめ

VB.NETでThread.Sleepを使うと、指定したミリ秒だけスレッドの処理を止めることができます。

ただしUIを含むメインスレッドでの実行は、フリーズの原因となるため避けることが推奨されます。

用途によっては別スレッドや非同期手法を活用しながら適切に実装することが大切です。