- - PR -
ShowDialogでハングする。
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-22 08:47
じゃんぬねっと様
確かに仰るとおりです。 検証コードには、少々お時間を頂きたいです。 Win32のネイティブコードであれば、アセンブラで追いかけることも可能ですが、 C#は混合モード表示も無く、コードのほとんどの部分が隠蔽されネイティブとは勝手が違いすぎてよくわかりません。 検証する上で、確認しておかなければならない点等ございますでしょうか? P.S. TopMost は False です。 Activated イベントもハンドルしていません。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-06-22 09:35
Load イベントが発生しない事ということで考えると イベントハンドラの定義が消えているとか this.Load += new System.EventHandler(this.Form1_Load); が InitializeComponent() にありますか? | ||||||||||||||||
|
投稿日時: 2006-06-22 09:50
イベントハンドラの定義は問題なく存在しています。 デバッガで、確実に通過していることも確認済みです。 | ||||||||||||||||
|
投稿日時: 2006-06-22 12:53
「ハング」してると思われるタイミングで、デバッガで一時停止してみてはどうでしょうか?
処理を脱出していないのは多分 COPECHAN さん(もしくはチームの誰か)の書いたコードですよ。 _________________ 囚人のジレンマな日々 | ||||||||||||||||
|
投稿日時: 2006-06-22 13:13
Framework内部が原因である可能性はきわめて低いですが。 | ||||||||||||||||
|
投稿日時: 2006-06-22 13:18
一時停止してみました。(すみません、混合モードウィンドウあったんですね。)
デバッカの緑の▲は、下記の矢印の場所を示していました。 ds:[7BA76768h]の関数を呼んだところで止まっているように見えます。 また、呼び出し履歴の最上位は、[<非ユーザコード>]を示しています。 ---- 000000de mov edx,dword ptr ds:[01CC1010h] 000000e4 mov ecx,esi 000000e6 cmp dword ptr [ecx],ecx 000000e8 call dword ptr ds:[163253E8h] if( DialogResult.OK == itemSearch.ShowDialog( this ) ) 000000ee mov dword ptr [ebp-24h],1 000000f5 mov edx,edi 000000f7 mov ecx,esi 000000f9 cmp dword ptr [ecx],ecx 000000fb call dword ptr ds:[7BA76768h] →00000101 mov ebx,eax 00000103 cmp dword ptr [ebp-24h],ebx 00000106 jne 0000018C ---- よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-06-22 15:31
ShowDialog(this); とか Show(this); じゃなくて ShowDialog(); や Show(); でも「ハング」しますか? (例えばthisがShowするForm自身だったら例外でるだろうし) Show() ってVisibleをtrueにしているだけだと思うので、、 Visibleをオーバーライドしてるとか、、OnPaintとかをオーバーライドしてるとか・・・
| ||||||||||||||||
|
投稿日時: 2006-06-22 22:02
確認がありませんが、では、 Text に対して値を設定しなければ、ハングしない のでしょうか?
これが確認してあるなら、get アクセスメソッドも同じように、少しずつコメントアウトを外して、確認するべきだと思うのですが... しかし、さんぷる、おかしくない?
label1 を、外部から書き換えるのは、良くないですね。Label は、Read Only で良いはずです。 理由は、kazukiさんのコード、特にコンストラクタを見てください。 また、ここで GC.Collect をする意図も不明。 こんなもの、自分で呼び出すものではありません。 それとも、Dispose の代わりに使ってる? そもそも、本当にここで DB アクセスの必要があるの? label1 を返すことと関係があるの? または、label1 を書き換えている? そういえば、Label を返す必要があるの? Label.Text へのアクセサがあれば足りるんじゃない? どう考えても、このアクセス メソッドで行っていることが疑わしい。
この書き方だと、「自作のコードはない」といっているのに等しい。 それは、おかしい。 |