DLL をプラグインとしてロードする C# (FFx 3.5) アプリケーションがあります。これらのプラグインは個別の AppDomains に読み込まれます (多くの正当な理由により、このアーキテクチャは変更できません)。これはすべて順調です。
これらのプラグインのいずれかからダイアログを表示する必要があります。ダイアログ フォームをメイン アプリケーションに戻してそこに表示することはできないことに注意してください (現在のインフラストラクチャではサポートされていません)。
失敗1
DLL でフォームを作成し、Show を呼び出しました。ダイアログのアウトラインは表示されましたが、描画されず、マウス イベントに応答しません。これは、DLL が別の AppDomain にあり、アプリのメッセージ ポンプがメッセージを新しいフォームにディスパッチできないためであると想定しました。
失敗 2
私の DLL では、フォームを作成し、ShowDialog を呼び出しました。これは、すべての権利により、ダイアログ用の内部メッセージ ポンプを作成する必要があります。ペイントを終了し、マウス イベントに応答しなくなるため、Windows メッセージをディスパッチします。何らかの理由で、メイン アプリのメッセージ ポンプがディスパッチされていないようです。
失敗 3
DLL でフォームを作成し、Application.Run を呼び出しました。これにより、完全な 2 番目のメッセージ ポンプが確実に作成されます。失敗 2 と同じ動作になります。ダイアログは動作しますが、呼び出し元のアプリは動作しません。
ここで正確に何が起こっているのか、他の AppDomain の DLL からダイアログを表示して、呼び出し元と呼び出し先の両方が応答して適切にペイントする方法についての考えはありますか?