Application.DoEvents()
フォーム専用ですか?
このコマンドは、以前のすべてのコマンドが確実に処理されるようにするために使用されたと思いましたが、ドキュメントを読んだ後では、もうわかりません。
はい、本当に Windows フォームを対象としています。しかし、私の見解では、それは可能な限り避けるべきです。
これは通常、長時間実行される操作を別のスレッドに配置することに煩わされたくない開発者によるハックとして使用されます...しかし、それは追跡が非常に困難な再入可能性の問題を導入していることを意味します。また、しばらくの間 UI スレッドをブロックし続けます (ファイル操作のようなものが含まれている場合、操作がユーザーに目に見える影響を与えないほど迅速に完了するかどうかを実際に予測することはできません)。
WinForms がなければ、標準のイベント キューはありません。(まあ、WPF にはイベント キューがありますが、これは単なる別のフレームワークです)。
アプリケーションの外部で何かが発生するのを待っている場合 (たとえば、特定のディレクトリにファイルがドロップされるなど)、可能性のある回避策は、 System.Timers名前空間のTimerクラスです。
例 (MSDN に基づく):
Private Sub SetTimer()
Dim aTimer As New System.Timers.Timer
AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
aTimer.Interval = 5000
aTimer.Enabled = True
Console.WriteLine("Press q to exit")
While Console.Read <> Asc("q")
End While
End Sub
Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
'Do the job here
Console.WriteLine("HELLO WORLD!")
'Don't forget to disable the timer if you don't need it anymore
'Source.Enabled = False
End Sub
MSDN の詳細情報: http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.71%29.aspx
はい、Windows フォーム専用です。メッセージ ループがないため、コンソールまたは ASP.NET アプリケーションでは意味がありません。hereに示すように、ディスパッチャーを使用して WPF で行うことができます。とにかく、DoEvents
Jon が説明した理由により、おそらく迅速で汚いアプリケーション以外での使用はお勧めしません。