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