@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ブレークポイント停止時のフォーム

1
投稿者投稿内容
檜山
会議室デビュー日: 2006/04/13
投稿数: 15
投稿日時: 2006-06-20 02:05
VB6で例えばファイルから読み込んだ内容を順次TextBoxにセットする、という処理に対して適当なところにブレークポイントを設定してデバッグ実行した場合、ブレークポイントで停止状態であってもウィンドウを切り替えることでフォーム上のTextBox等の状態を(スクロール等の操作は無理でも)とりあえず確認することができましたが、VB2005ではいわゆる応答なし状態になってしまうようで気軽に確認ができません。

また、同じくVB6で外部アプリケーションを起動して終了待ち(同期実行)させたかった場合、CreateProcessやWaitForSingleObjectといったAPI関数を駆使していたのが、VB2005ではMicrosoft.VisualBasic.Interaction.Shellメソッドで簡単に実現できるようだったので便利だな〜と思っていたのですが、こちらもやはり起動元フォームが応答なし状態になってしまい、(同期実行なので操作できないのはいいのですが)起動元フォームの描画(?)が行われずに真っ白になるのがちょっと気になります。

あまりたいしたことではないのですがこれらの現象に関して何かよい回避策や代替案がありましたら教えてください。
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-25 13:37
 Vista 対応をしていて思ったのですが、
だんだんと“行儀の悪い行い”が制限されています。

 周りでも「**の時はできたのに」という声を聞くのですが、
どういう仕組みでできていて、
なぜできなくなったのかを知れば、
何が行儀が悪いのか、
なぜ行儀が悪いのか、
わかってきます。

 わかってくれば、どうでも良くなってきます。


 読み込んだものの確認なら、
ウォッチ式で、
ウインドウを切り替えなくてもできますよね。

 Microsoft.VisualBasic 名前空間が、
なんのために用意されているのかを知れば、
他の方法もありますから、
「だから、なに?」
と、思うのですが。。。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-06-25 15:28
引用:

檜山さんの書き込み (2006-06-20 02:05) より:
VB6で例えばファイルから読み込んだ内容を順次TextBoxにセットする、という処理に対して適当なところにブレークポイントを設定してデバッグ実行した場合、ブレークポイントで停止状態であってもウィンドウを切り替えることでフォーム上のTextBox等の状態を(スクロール等の操作は無理でも)とりあえず確認することができましたが、VB2005ではいわゆる応答なし状態になってしまうようで気軽に確認ができません。


.NET はあまり使ったことがないので、以下、勘違いしたことを書くかもしれませんが、たしかに言われて見れば不思議ですね。ブレークポイントを仕掛けた場所は、ボタンなどがクリックされたといった UI のスレッドでしょうか?
この挙動は VB のほうが特殊な部類に入るのだと思います。普通にフレームワークを作ったら、UI スレッドがブレークポイントで止まってしまいますから、フォームの再描画などもされないはずですが、VB だとちゃんと再描画されますし、TextBox の内容の更新もされますね。
VB だと、ボタンが押されたりすると、有無を言わさずにイベントプロシージャーを別スレッドで呼ぶような仕組みになっているんでしょうかね。VB で「呼び出し履歴」を見てもボタンのイベントなどは見えないですし。余計な親切のような気もしないではないですが、ちょこちょこっと使うには便利ですね。でもやっぱり余計なお世話すぎるような。

#以下、後で追加。
ここでの VB とは、.NET ではない VB のこと(VB6 など)のことです。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}

[ メッセージ編集済み 編集者: unibon 編集日時 2006-06-25 15:30 ]
檜山
会議室デビュー日: 2006/04/13
投稿数: 15
投稿日時: 2006-06-25 21:44
Jitta様、unibon様、ご回答ありがとうございます。

Windowsアプリケーションのメッセージ処理構造上、イベントハンドラ内にブレークポイントを設定したらUIが更新されないのも当然だとは思うのですが、VB6ではステップ実行しながらUIの確認ができていたのが何かと便利だったもので…。
VC++でMFCを使用したWindowsアプリケーションの開発経験もあるので、やはりVB6がかなり特殊だったのですね。

最初の投稿で申し上げた通り、何か方法があれば…といった程度の質問でしたので特にないようでしたら別にこだわりはありません
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-25 21:58
引用:

檜山さんの書き込み (2006-06-25 21:44) より:

最初の投稿で申し上げた通り、何か方法があれば…といった程度の質問でしたので特にないようでしたら別にこだわりはありません(^_^;)


コマンド ウィンドウから、Form.TopMost = true の状態にして、
Application.DoEvents メソッドを叩くことで確認はできます。(確認しました)

# そのような手間をかけるよりは、「式ウォッチ」 などを利用した方が良いとは思いますが、
# レイアウトを見る時には、使えるかもしれませんね... (そんな機会はないかも)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)