
VB.NET開発(イベントプロシージャはマルチスレッドですか?)
以前より.NETのWindowsフォームの業務アプリ開発してますが、基本的な質問をさせて下さい。
イベントプロシージャの実行処理は、本体スレッド(実行時のスレッド)とは別のスレッドで動作しているのでしょうか。
例えば、ボタンのクリックイベントに何かしらの重い処理があったとします。このクリックイベントの処理ではボタンの制御をしていないので、イベントプロシージャの実行中は、処理中のボタンが押下可能な前提とします。この時、このボタンを3回押下して実行させると3つのスレッドが新規に作成されて実行していると考えて宜しいのでしょうか。
デリゲートやイベントに関するキーワードで検索して、いくつか資料を見たのですが、上記の疑問にぴったり合う解答がなく、質問させて頂きました。
業務アプリの開発で、今まで、あまりマルチスレッドなど意識せずやってきましたが、実は意識しなくても、マルチスレッドの開発をしていたことになるのでしょうか。
以前、VB6の開発もしておりました。
ちなみにVB6の場合も、イベントプロシージャはマルチスレッドで実行されていると考えて宜しいのでしょうか。
よろしくお願いします
No.2
- 回答日時:
> イベントプロシージャの実行中は、処理中のボタンが押下可能な前提とします。
でも押せないでしょ?
ボタン連打した時に、イベントプロシージャの処理が一通り終わり、もう一度
イベントプロシージャが走る場合があることに疑問を持っているなら、ウィンドウ
メッセージがキューに溜まってるからでしょう。アプリ内部の仕組みではなく、
ウィンドウの機能。広く言えばウィンドウを制御しているOSの機能です。
この回答への補足
すみません。
情報が不足しておりました。
ボタン押下のイベント処理の重い処理は、ループ中でSystem.Windows.Forms.Application.DoEvents();を実行しています。
それだと、処理中のボタンが押下可能だと思います。
処理中に押下可能でもマルチスレッドではないということでしょうか。
よろしくお願いします。
No.1
- 回答日時:
コントロールのイベントは、メインスレッドで動作する。
ボタンイベントについては、以下の無限ループで再進入できないことが確認できる。
VB6も全く同じ。
Private Sub Button1_Click(~)
While True
End While
End Sub
この回答への補足
すみません。
情報が不足しておりました。
ボタン押下のイベント処理の重い処理は、ループ中でSystem.Windows.Forms.Application.DoEvents();を実行しています。
それだと、処理中のボタンが押下可能だと思います。
イベント=>デリゲート=>非同期処理のような勝手なイメージがあり、マルチスレッドだと勘違いしているだけでしょうか。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- その他(コンピューター・テクノロジー) テストケースの問題 2 2023/08/14 10:22
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- イベント・祭り 高専4年生(実質大学1年生)の18才です。 地元で、地域のイベントを作ろうと思っています。でも、なか 1 2023/04/07 20:30
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- その他(芸能人・有名人) 芸能活動について 2 2023/06/18 00:18
- 統計学 前回イベントと今回イベントのデータ集計について 質問させてください。 イベント参加者の内アンケートを 3 2022/09/30 22:23
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- イベント・祭り 屋外の大型イベント開催について 1 2022/08/24 13:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
VBA、UserFormを前面に出力して...
-
VBA kernel32 の意味
-
Application.ScreenUpdating=Fa...
-
PostMessageの連続送信
-
ACCESS側からEXCELの書式を設定...
-
Excel VBA で処理中断(DoEvents...
-
起動後直に実行するコードはど...
-
VBSで応答不要のメッセージボッ...
-
VbScriptでExcel操作待ちモード...
-
VB6でフォームをリロードしたい
-
ボタンが押された事を検知する...
-
【MFC】イベントの無効化について
-
メッセージボックスのボタン名変更
-
<input type="file">タグで「キ...
-
エクセルVBAでクリップボード内...
-
ASP.NETでのメッセージ画面を出...
-
Excel VBA 実行中に一瞬フリー...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
ACCESS側からEXCELの書式を設定...
-
メッセージボックスのボタン名変更
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
Excel VBA で処理中断(DoEvents...
-
VBA、UserFormを前面に出力して...
-
Application.ScreenUpdating=Fa...
-
MFCのワーカースレッドとUIスレ...
-
ASP.NETでのメッセージ画面を出...
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
【C#】 あるイベントから別イ...
-
ボタンが押された事を検知する...
-
PostMessageの連続送信
-
VBA メッセージボックスを自動...
-
エクセルVBAでクリップボード内...
-
VCでウエイトをミリ秒でかけ...
-
ループを使わずに、特定時間に...
-
VB6 コマンドボタン クリック...
おすすめ情報