各プラグインが独自のスレッドで実行され、独自のウィンドウを作成する「プラグ可能な」C# アプリケーションがありますが、全体的に単一の MDI アプリケーションのように見えます。
たとえば、ウィンドウは次のように Z オーダーで配置されます。
- メインヘッダーフォーム
- PluginA_Form
- PluginB_Form
- PluginC_Form
- 背景フォーム
- PluginC_Form
- PluginB_Form
- PluginA_Form
...ここで、MainHeaderForm は常に一番上にあり、BackgroundForm は常にパイルの一番下にある必要があります。ただし、他の (外部) Windows がこのアプリケーションの Z オーダー内に表示される可能性があってはなりません (したがって、MDI の錯覚を壊します)。私は常にこれらのウィンドウをこの順序で維持し、(可能な場合) このウィンドウの「グループ」を他のすべてのウィンドウの上に表示したいと考えています。
プラグインを別のスレッドに置いている理由は、プラグインが応答しなくなった場合に強制的に削除/強制終了できるようにするためです。私の知る限り、すべてのプラグインをダウンさせずに単一のスレッドでこれを行うことはできません。
しかし、(おそらくタイミングが原因で) プラグイン ウィンドウが BackgroundForm の背後に表示されたり、その他の奇妙な点が表示されることがあるという問題があります。
GUI スレッドから全体的な Z オーダーを維持し、「Invokes」を使用して Windows に SetWindowPos を実行させています。ただし、前述のように、これはおそらくブロッキング呼び出し (?) を実行しているため、いくつかの問題の原因となっている可能性があります。
それ以外の場合、機能は希望どおりです。表示の問題だけです。
誰かが追加のガイダンスを持っているなら、私は大歓迎です。
どうもありがとう