Иногда ShowWindow никогда не вызывает OnShowWindow и основное приложение зависает - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть многопоточное приложение с несколькими поддерживающими DLL и несколькими всплывающими диалогами. Мое главное приложение загружает все библиотеки DLL при запуске, что создает все всплывающие окна, но они остаются скрытыми до тех пор, пока они не понадобятся.

Когда пользователь нажимает кнопку в главном приложении, отображается конкретное всплывающее окно (из библиотеки DLL):вызов ShowWindow (SW_SHOW) (без режима)

Иногда (1 в 10 раз?) всплывающее окно просто не отображается, и основное приложение зависает. OnShowWindow диалогового окна Popup никогда не вызывается. Вместо этого я попытался вызвать ShowWindowASync, но иногда всплывающее окно по-прежнему не отображается, но этот вызов не блокирует главное приложение.

Эта проблема касается только всплывающих окон в одной DLL.

Если во всплывающем окне отображается первый раз, когда вызывается ShowWindow, его можно закрывать и повторно открывать на неопределенный срок в течение всего времени жизни основного приложения. Если (с помощью ShowWindowASync) всплывающее окно не отображается, оно никогда не будет отображаться в течение времени жизни основного приложения. Я могу перезапустить приложение (не перестраивая что-либо), и есть шанс, что оно сработает или не получится. Мне не удалось определить какие-либо прогнозирующие условия или свойства.

Я использовал инструменты для перенумерации всех элементов ресурса, чтобы не было конфликтов в решении.

ОБНОВЛЕНИЕ:

Я использовал Winspector, чтобы получить некоторую информацию о диалоговом окне, когда оно работает и не работает.

Когда диалоговое окно работает (отображается правильно), Winspector сообщает, что у моего диалога правильная позиция (10,96, 1015, 514), атрибуты стиля, соответствующие шаблону ресурса, идентификатор 0 (не уверен, что означает идентификатор) и «Владелец EXE» - это «MyApp.exe» - я вижу много сообщений, входящих и выходящих из диалога, включая WM_SHOWWINDOW.

Когда диалоговое окно терпит неудачу (не получает сообщение окна показа), Winspector сообщает о позиции (-1512, 190, -517, 634), атрибуты стиля, которые не соответствуют шаблону ресурса, ID509290824, а владельцем EXE является «C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe» - я также не вижу ЛЮБЫХ сообщений в средстве просмотра сообщений within Winspector, когда диалоговое окно не отображается.

Очевидно, что диалоговое окно создается неправильно. CDialog :: Создать никогда не подводит меня. Кроме того, я сталкиваюсь с этой проблемой в выпуске (не использую Visual Studio), поэтому это не проблема VS.

...