4

そのため、この1日ほど、モーダルダイアログによって引き起こされるバグを修正してきました。私は、Windowsメッセージポンプを介してサーバーと通信するアプリケーションに取り組んでいます。ShowDialog()を使用してモーダルフォームを表示すると、メッセージポンプがブロックされ、メッセージは処理されませんが、キューに蓄積されます(予期される動作)。

ただし、最近、メニュー項目のクリックイベントを介してモーダルフォームを開くと、メッセージがメインフォームに送られ、処理されることに気付きました。メニュー項目のクリックイベントを通じてモーダルフォームが表示されたときに、これらのメッセージがブロックされない理由を誰かが知っていますか?

編集:私はC#を使用していることに注意する必要があります。これはどう; 誰もこの質問に答えられない場合、誰かがこれを自分で調査する方法を教えてもらえますか?私が考えることができる唯一のことは、呼び出しスタックを調べることです。残念ながら、これはまだ何も教えてくれません。

4

7 に答える 7

1

一般に、クライアントUIは、長いサーバー操作のためにブロックするべきではありません。.Netを使用すると、BackgroundWorkerスレッドを使用してサーバー作業を非常に簡単に行うことができます。例については、この投稿を参照してください:マルチスレッドインポート

この例はVBにありますが、C#の例のリンクをたどることができます。

于 2009-02-04T05:45:47.230 に答える
1

はい、メニュー項目のクリック イベントから ShowDialog() を呼び出しています。この場合、メッセージはモーダル ダイアログを介してメイン フォームに送られます。

于 2008-09-25T23:22:59.097 に答える
1

予想されるメッセージ ポンピング動作を示しているダイアログに対して、メニューからダイアログに同じ所有者/親を設定してみてください。

于 2008-11-07T16:34:03.697 に答える
0

クリックイベントからShowDialog()を呼び出していますか、それとも他の方法ですか?

于 2008-09-25T23:09:48.537 に答える
0

@Chris: 標準の MenuStrip コントロールを使用しています。別のスレッドで実行されている場合、フォームがモーダルとしてどのように表示されるかに興味があります。メッセージ キューをブロックしないように、別のスレッドからダイアログを表示して実験しましたが、メイン フォームを親として指定できないため、実際にはモーダルではありません。

于 2008-09-26T01:23:15.720 に答える
0

どの種類のメニュー コントロールを使用していますか? メインフォームが実行されているスレッドとは別のスレッドで実行されている可能性はありますか?

于 2008-09-26T01:06:18.427 に答える