2
WinformsのUIスレッドは、Application.Run
を呼び出してメッセージポンプを実行する責任があります。メッセージポンプとは、キューからメッセージを引き出し続ける無限ループを意味します。UIメッセージポンプと実行コードの両方を実行していますか?
これで私の質問ですが、UIスレッドはex。クリックハンドラがトリガされますか?それはメッセージポンプで忙しくて、コードを実行できませんか?
WinformsのUIスレッドは、Application.Run
を呼び出してメッセージポンプを実行する責任があります。メッセージポンプとは、キューからメッセージを引き出し続ける無限ループを意味します。UIメッセージポンプと実行コードの両方を実行していますか?
これで私の質問ですが、UIスレッドはex。クリックハンドラがトリガされますか?それはメッセージポンプで忙しくて、コードを実行できませんか?
メッセージポンプからメッセージを処理するには、(clickイベントを介して)メッセージポンプから同期的に呼び出されるため、メッセージを処理するには時間がかかります。
高価なコードが原因でUIがハングすることがあるのはこのためです。
ボタンをクリックすると、イベントハンドラのコードがメッセージとしてキューに送信されますか? – ebb
クリックのウィンドウメッセージはMPによって処理され、内部はWinFormsコードのClickイベントを呼び出し、このイベントのサブスクライバは同期して実行されます。クリックハンドラはそのようなサブスクライバの1つです。 –
ああ意味がある! - しかし、確かに、MPによって処理されるメッセージには、別のボタンのクリックイベントがあるため、どのクリックイベントを呼び出すべきかについての何らかの情報が含まれていなければなりません。 – ebb