1

MFCアプリケーション用の.netプラグインを作成しています。WinFormsと.net4を使用してフォームを作成しました。ユーザーがMFCアプリケーションのボタンをクリックすると、フォームが表示されます。私のコントロールの1つは、Application.Idleを使用していくつかのタスクを実行します。

問題は、Application.Idleが起動されないように見えることです。

  • このシナリオで「アプリケーション」とは正確には何を指しますか?それはMFCアプリケーション全体ですか、それとも.net形式ですか?
  • Application.Idleが起動しないのはなぜですか?

更新
私はそれをうまく動かすことができました、ここに2つの可能な解決策があります:

  • Form.ShowDialog()を使用してフォームを表示します(したがって、フォームは独自の.netメッセージポンプを実行します)
  • STAスレッドを作成し、STAスレッドでフォームを作成して、Application.Run()を呼び出します。次に、Form.Show()を使用できます(フォームは、作成されたスレッドで.netメッセージポンプを使用します。この場合は、.net STAスレッドです)。
4

2 に答える 2

2

Winformsがアプリケーションがアイドル状態であることを認識できる唯一の方法は、メッセージキューに他のメッセージが見つからない場合です。問題は、メッセージループをポンプするのはWinformsではなく、MFCであるということです。Winformsのベルとホイッスルについては何も知りません。他の問題が発生しました。タブとショートカットのキーストロークが機能しなくなり、Winformsメッセージループによって処理されることに注意してください。

これに対するクリーンな解決策はありません。マスターは1つだけです。非常に不完全な修正は、Form.ShowDialog()を使用し、Application.Run()を呼び出すことができるように新しいSTAスレッドを開始することです。

于 2011-09-29T22:48:41.247 に答える
1

.net形式は.netアプリケーションではなく、MFCアプリケーションでもありません。MFCには、アイドル状態のときにアプリケーションで呼び出す独自のコードがあります。Application.Idleの知識はありません。

于 2011-09-29T22:36:08.840 に答える