
はじめて質問させていただく、VB.NET初心者です。
ただいまスレッド、イベント処理を作成中で
Form1にButton1、Label1を貼り付け以下の様なプログラムを記述しました。
(スレッドにて5秒ごとにイベントを発生させます。)
'イベント引数
Public Class EventArgs
Inherits System.EventArgs
Public nowTime As String
End Class
'イベント発行
Public Class EventTest
Public Event _event(ByVal sender As Object, ByVal e As EventArgs)
Public Sub Go()
Dim args As New EventArgs()
args.nowTime = Now.ToString
RaiseEvent _event(Me, args)
End Sub
End Class
'フォーム内処理
'スレッド宣言
Dim MyThread As New System.Threading.Thread(AddressOf _Thread)
Private WithEvents _test As New EventTest()
'イベント受信
Private Sub Handler(ByVal sender As System.Object, ByVal e As EventArgs) Handles _test._event
Label1.Text = e.nowTime
End Sub
'スレッド(5秒間隔でイベント発行)
Private Sub _Thread()
Dim i As Integer
For i = 0 To 99
System.Threading.Thread.Sleep(5000)
_test.Go()
Next
End Sub
'スレッド起動
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MyThread.Start()
End Sub
End Class
開発環境から普通に実行すれば正常に動作している様なのですが、
イベント受信部(Handler)のLabel1.Text = e.nowTime部に
ブレークポイントを置いてLabel1のウォッチをするとその時点で
処理がとまってしまいます。なぜとまるのかが知りたいです。
作成方法がまずいのでしょうか?
皆様よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
NETは未経験ですが、VB6も同じです。
VB6の説明で申し訳ないですが、書いておきます。質問の中に答えがあるように思えます。
>ブレークポイントを置いて
ブレークポイントを置いたから止まっているのです。
NETの構文はやはりわかりませんが、タイマーは割り込みで発生しようとします。その割り込みを許可するにはDoEventで行います。DoEventsを発行すると、他の割り込み処理が走ります。
NETには似たようなものはありませんか?
この回答への補足
いろいろ試してみた結果を補足させてください。
イベント受信部を以下の様に変更してみました。
ケース1
Private Sub Handler(ByVal sender As System.Object, ByVal e As EventArgs) Handles _test._event
Beep() 'ブレークポイントをここにする。
End Sub
結果:ブレーク後、再開しても処理は行い次のイベントが発生する。
ケース2
上記コードのBeep()を
Button1.Text = e.nowTime
にして同じくブレークポイントを置いてみる。
結果:ブレークし、Button1の中身をウォッチウィンドウでのぞくことができる。
再開後、次のイベントが発生する。
ケース3
上記コードを
Label1.Text = e.nowTime
にして同じくブレークポイントを置いてみる
結果:ブレークし、Label1の中身をウォッチウィンドウでのぞくと展開に非常に時間がかかります。展開後、メンバ?(言い方が違うかもしれません)のPreferredWidth,RenderTransparent,TabStop,TextAlign,UseMnemonicの値表示のところに"error:cannot obtain value"と表示されます。
その後再開してもフォームがアクティブにならず次のイベントも発生しません。
強制的に停止ボタンで実行を終了しないといけなくなります。
ケース4
Button1.Text = e.nowTimeにコードを戻してブレーク後、Label1をウォッチウィンドウで表示させる。
結果:ウォッチのLabel1の値が通常は{System.Windows.Forms.Label}と表示されるのに"error:cannot obtain value"と表示され展開ができない。処理再開後もケース3と同じ。
以上からLabel1をウォッチするだけでおかしくなっている様に思えます。
なぜなのでしょうか?Labelは使用してはいけないのでしょうか?
よろしくお願いいたします。
尚、ウォッチウィンドウに登録されている変数名はフォームロード時に1度停止させ全て削除してから上記の事を行いました。
ご回答ありがとうございます。
ただ説明不足で正確に現象をお伝えできてない部分がありました。申し訳ありません。
補足します。
1度DoEventsの事も調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPU負荷率の安全な上限と計...
-
電車で待機列の割り込みについ...
-
マイコン C言語 割り込み処理...
-
スーパーのレジで並んでいたら...
-
PIC12F683のソフトウェアUARTは...
-
CPUの処理量を減らすコーデ...
-
VB.NET スレッドからのイベント...
-
Z80の割り込みについて
-
【H8-3052F】タイマ割り込み
-
このレジの並び方は間違ってま...
-
【組込み】割り込み中のstatic...
-
Macターミナルで実行中のプログ...
-
メッセージボックスのボタン名変更
-
フレームワーク「4.8.1」で、[S...
-
VBA kernel32 の意味
-
VBSの処理中一旦処理を止めて再...
-
プロセスのアタッチ・デタッチ...
-
VBSで応答不要のメッセージボッ...
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
CPU負荷率の安全な上限と計...
-
マイコン C言語 割り込み処理...
-
このレジの並び方は間違ってま...
-
USB機器からのデータ受信による...
-
【組込み】割り込み中のstatic...
-
VB6でSendKeyを利用したTab移動...
-
一定時間操作がなかったら、と...
-
VB.NET スレッドからのイベント...
-
irqbalance って
-
ウォッチドッグタイマ(WDT)の...
-
Timerコントロールによる動作の...
-
pic 複数の割り込み関数 切り分...
-
マイコンSH-2の割り込みを用い...
-
Amazonfireタブレットにわから...
-
STATUSのZフラグについて
-
マイコンの割り込みについて教...
-
Timerコンポーネントのインター...
-
電車乗車時、並んでいるのに割...
おすすめ情報