多线程MDI类Windows应用程序的问题

时间:2011-08-23 10:19:54

标签: c# windows multithreading z-order

我有一个“可插拔”的C#应用​​程序,其中每个插件都在它自己的线程上运行并创建它自己的窗口,但是给出了单个MDI应用程序的整体错觉。

例如,窗口按照Z顺序布局:

  • MainHeaderForm
    • PluginA_Form
      • PluginB_Form
        • PluginC_Form
          • BackgroundForm

...其中MainHeaderForm始终位于顶部,而BackgroundForm必须始终位于堆的底部。 但是,其他(外部)Windows不应该出现在此应用程序的Z顺序中(从而打破MDI错觉)。我总是希望按照这个顺序保留这些窗口,并且(在可能的情况下)在显示所有其他窗口时显示窗口的“组”。

我将插件放在不同线程上的原因是,如果它们没有响应,就可以强行删除/杀死它们。据我所知,如果不关闭所有插件,就无法在单个线程上完成。

但是,我遇到了问题(可能是由于时间问题),有时候插件窗口会出现在BackgroundForm和其他奇怪的东西之后。

我从GUI线程维护整个Z顺序,并使用“Invokes”让Windows执行SetWindowPos。但是,如上所述,这可能正在进行阻塞调用(?),这可能会解决一些问题。

否则,功能是所希望的 - 它只是显示问题。

如果有人有任何额外的指导,我将不胜感激。

非常感谢

0 个答案:

没有答案