我有一个“可插入”C# 应用程序,其中每个插件都在它自己的线程上运行并创建它自己的窗口,但给人一种单一 MDI 应用程序的整体错觉。
例如,窗口按 Z 顺序排列,如下所示:
- MainHeaderForm
- PluginA_Form
- PluginB_Form
- PluginC_Form
- 背景表格
- PluginC_Form
- PluginB_Form
- PluginA_Form
... MainHeaderForm 始终位于顶部,BackgroundForm 必须始终位于堆的底部。但是,其他(外部)窗口不应该出现在此应用程序的 Z 顺序中(从而打破 MDI 错觉)。我总是希望按此顺序保持这些窗口,并且(在可能的情况下)在显示这些窗口时将这组窗口显示在所有其他窗口之上。
我将插件放在单独的线程上的原因是,如果它们变得无响应,它们可以被强制删除/杀死。据我所知,如果不关闭所有插件,这是无法在单个线程上完成的。
但是,我遇到了一些问题(可能是由于时间问题),有时插件窗口出现在 BackgroundForm 和其他奇怪的东西后面。
我正在维护来自 GUI 线程的整体 Z 顺序,并使用“调用”来让 Windows 执行 SetWindowPos。但是,如上所述,这可能是在进行阻塞调用(?),这可能会导致一些问题。
否则,功能就如你所愿——只是显示问题。
如果有人有任何额外的指导,我将不胜感激。
非常感谢