• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NET開発(イベントプロシージャはマルチスレッドですか?))

VB.NET開発でのイベントプロシージャのマルチスレッド動作について

このQ&Aのポイント
  • VB.NET開発におけるイベントプロシージャの実行処理は、本体スレッド(実行時のスレッド)とは別のスレッドで動作しています。
  • ボタンのクリックイベントなどで重い処理がある場合、イベントプロシージャの実行中でも処理中のボタンは押下可能です。
  • VB6の場合も、イベントプロシージャはマルチスレッドで実行されていると考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

DoEvents でイベントを処理すると、そのイベントが終わるまで 元の処理に戻って来ないでしょう? サブプロシージャを呼び出したようなものです。 関数を呼び出すとスレッドが分かれますか?同時に実行されますか? 呼び出し側の処理が保留にされて、呼び出された関数の処理が先に 実行されます。 実行はあくまでシングルです。

panda1212
質問者

お礼

よく理解できました。 ありがとうございました

その他の回答 (2)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

> イベントプロシージャの実行中は、処理中のボタンが押下可能な前提とします。 でも押せないでしょ? ボタン連打した時に、イベントプロシージャの処理が一通り終わり、もう一度 イベントプロシージャが走る場合があることに疑問を持っているなら、ウィンドウ メッセージがキューに溜まってるからでしょう。アプリ内部の仕組みではなく、 ウィンドウの機能。広く言えばウィンドウを制御しているOSの機能です。

panda1212
質問者

補足

すみません。 情報が不足しておりました。 ボタン押下のイベント処理の重い処理は、ループ中でSystem.Windows.Forms.Application.DoEvents();を実行しています。 それだと、処理中のボタンが押下可能だと思います。 処理中に押下可能でもマルチスレッドではないということでしょうか。 よろしくお願いします。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

コントロールのイベントは、メインスレッドで動作する。 ボタンイベントについては、以下の無限ループで再進入できないことが確認できる。 VB6も全く同じ。 Private Sub Button1_Click(~) While True End While End Sub

panda1212
質問者

補足

すみません。 情報が不足しておりました。 ボタン押下のイベント処理の重い処理は、ループ中でSystem.Windows.Forms.Application.DoEvents();を実行しています。 それだと、処理中のボタンが押下可能だと思います。 イベント=>デリゲート=>非同期処理のような勝手なイメージがあり、マルチスレッドだと勘違いしているだけでしょうか。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう