- ベストアンサー
VB.NET開発でのイベントプロシージャのマルチスレッド動作について
- VB.NET開発におけるイベントプロシージャの実行処理は、本体スレッド(実行時のスレッド)とは別のスレッドで動作しています。
- ボタンのクリックイベントなどで重い処理がある場合、イベントプロシージャの実行中でも処理中のボタンは押下可能です。
- VB6の場合も、イベントプロシージャはマルチスレッドで実行されていると考えられます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
DoEvents でイベントを処理すると、そのイベントが終わるまで 元の処理に戻って来ないでしょう? サブプロシージャを呼び出したようなものです。 関数を呼び出すとスレッドが分かれますか?同時に実行されますか? 呼び出し側の処理が保留にされて、呼び出された関数の処理が先に 実行されます。 実行はあくまでシングルです。
その他の回答 (2)
- MARU4812
- ベストアンサー率43% (196/452)
> イベントプロシージャの実行中は、処理中のボタンが押下可能な前提とします。 でも押せないでしょ? ボタン連打した時に、イベントプロシージャの処理が一通り終わり、もう一度 イベントプロシージャが走る場合があることに疑問を持っているなら、ウィンドウ メッセージがキューに溜まってるからでしょう。アプリ内部の仕組みではなく、 ウィンドウの機能。広く言えばウィンドウを制御しているOSの機能です。
補足
すみません。 情報が不足しておりました。 ボタン押下のイベント処理の重い処理は、ループ中でSystem.Windows.Forms.Application.DoEvents();を実行しています。 それだと、処理中のボタンが押下可能だと思います。 処理中に押下可能でもマルチスレッドではないということでしょうか。 よろしくお願いします。
- todo36
- ベストアンサー率58% (728/1234)
コントロールのイベントは、メインスレッドで動作する。 ボタンイベントについては、以下の無限ループで再進入できないことが確認できる。 VB6も全く同じ。 Private Sub Button1_Click(~) While True End While End Sub
補足
すみません。 情報が不足しておりました。 ボタン押下のイベント処理の重い処理は、ループ中でSystem.Windows.Forms.Application.DoEvents();を実行しています。 それだと、処理中のボタンが押下可能だと思います。 イベント=>デリゲート=>非同期処理のような勝手なイメージがあり、マルチスレッドだと勘違いしているだけでしょうか。 よろしくお願いします。
お礼
よく理解できました。 ありがとうございました