7

Application.DoEvents()フォーム専用ですか?

このコマンドは、以前のすべてのコマンドが確実に処理されるようにするために使用されたと思いましたが、ドキュメントを読んだ後では、もうわかりません。

4

4 に答える 4

15

はい、本当に Windows フォームを対象としています。しかし、私の見解では、それは可能な限り避けるべきです。

これは通常、長時間実行される操作を別のスレッドに配置することに煩わされたくない開発者によるハックとして使用されます...しかし、それは追跡が非常に困難な再入可能性の問題を導入していることを意味します。また、しばらくの間 UI スレッドをブロックし続けます (ファイル操作のようなものが含まれている場合、操作がユーザーに目に見える影響を与えないほど迅速に完了するかどうかを実際に予測することはできません)。

于 2011-02-12T11:12:12.887 に答える
3

WinForms がなければ、標準のイベント キューはありません。(まあ、WPF にはイベント キューがありますが、これは単なる別のフレームワークです)。

于 2011-02-12T11:12:31.633 に答える
3

アプリケーションの外部で何かが発生するのを待っている場合 (たとえば、特定のディレクトリにファイルがドロップされるなど)、可能性のある回避策は、 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

于 2012-11-08T09:40:56.360 に答える
2

はい、Windows フォーム専用です。メッセージ ループがないため、コンソールまたは ASP.NET アプリケーションでは意味がありません。hereに示すように、ディスパッチャーを使用して WPF で行うことができます。とにかく、DoEventsJon が説明した理由により、おそらく迅速で汚いアプリケーション以外での使用はお勧めしません。

于 2011-02-12T11:17:38.330 に答える