Проблемы с многопоточным MDI-подобным приложением Windows - PullRequest
0 голосов
/ 23 августа 2011

У меня есть «подключаемое» приложение C #, где каждый плагин работает в своем собственном потоке и создает свое собственное окно, но дает общую иллюзию отдельного приложения MDI.

Например, окнавыложено в Z-порядке примерно так:

  • MainHeaderForm
    • PluginA_Form
      • PluginB_Form
        • PluginC_Form
          • BackgroundForm

... где MainHeaderFormвсегда вверху, а BackgroundForm всегда должен быть внизу стопки.Однако не должно быть возможности для других (внешних) Windows появиться в Z-порядке этого приложения (таким образом разрушая иллюзию MDI).Я всегда хочу держать эти окна в таком порядке и (где это возможно) показывать эту «группу» окон над всеми остальными окнами, когда они отображаются.

Причина, по которой у меня есть плагины в отдельных потоках, заключается в том, чточтобы их можно было принудительно удалить / убить, если они перестают отвечать на запросы.Насколько я знаю, это невозможно сделать в одном потоке без отключения ВСЕХ плагинов.

Но у меня возникают проблемы, когда (возможно из-за синхронизации) иногда окна плагинов появляются заBackgroundForm и другие странности.

Я поддерживаю общий Z-порядок из потока GUI и использую «Вызывает», чтобы заставить Windows выполнять SetWindowPos.Однако, как упомянуто выше, это, вероятно, выполняет блокирующий вызов (?), Который может объяснить некоторые из проблем.

В противном случае функциональность является желательной - это просто проблемы с отображением.

Если у кого-то есть дополнительные указания, я буду очень признателен.

Большое спасибо

...