
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
ファンクションキーのキャンセ...
-
Excel vbaで逆ポーランド記法で...
-
Excelのワークシートに行を挿入...
-
VB.NETのUsingキーワードの使い方
-
My Documentsディレクトリを
-
Stack around the variable 'xx...
-
手動かプログラムでの起動かの判断
-
VBA、UserFormを前面に出力して...
-
ループを使わずに、特定時間に...
-
終了処理が実行されない場合は...
-
VB Loopを一時停止し再開あるい...
-
EXCEL VBA「Application.Displa...
-
C#で処理中画面を表示したい。
-
メッセージボックスの表示につ...
-
【KeyDown】キーコードについて
-
ボタンが押された事を検知する...
-
処理をとめるキャンセルボタン...
-
[VC++] AfxBeginThreadで生成し...
-
for文実行中を途中で中断するに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
ACCESS側からEXCELの書式を設定...
-
メッセージボックスのボタン名変更
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
VBA、UserFormを前面に出力して...
-
PostMessageの連続送信
-
Excel VBA で処理中断(DoEvents...
-
【C#】 あるイベントから別イ...
-
Application.ScreenUpdating=Fa...
-
エクセルVBAでクリップボード内...
-
シャットダウン時のExcel強制終...
-
マウスのクリックを無視したい
-
Excel VBA 実行中に一瞬フリー...
-
ボタンが押された事を検知する...
-
Excel VBA 自動的に閉じるMsgBox
-
VCでウエイトをミリ秒でかけ...
-
VB Loopを一時停止し再開あるい...
-
「キャンセル」ボタン付きの処...
-
VB6 コマンドボタン クリック...
おすすめ情報