MessageBoxW вызывает GetMessageW с NULL hWnd? - PullRequest
1 голос
/ 25 марта 2020

У меня есть несколько Debug.Assert операторов в коде выключения моего приложения winforms. Когда я использую ConsoleTraceListener, Debug.Assert ведет себя так, как вы ожидаете. Когда я использую DefaultTraceListener, всплывающее окно подтверждения блокируется, и кнопки перестают отвечать, а трассировка стека показывает вложенное исключение при обработке сообщений моего основного окна.

It могло бы показаться, что Debug.Assert фактически возобновляет накачку сообщений моего основного окна.

Я копался в справочном источнике. NET Framework, чтобы выяснить, как это могло произошло (например, возможно Debug.Assert вызывает все oop из Application.DoEvents()) и обнаружил, что внутренне DefaultTraceListener вызывал MessageBoxW.

Если MessageBoxW вызывал GetMessageW со своим собственные hWnd, это не будет отправлять сообщения для моего главного окна, верно? Поэтому я правильно предположил, что по какой-то причине MessageBoxW вызывает GetMessageW с NULL hWnd?

1 Ответ

3 голосов
/ 25 марта 2020

В ответ на ваш вопрос, да MessageBoxW заставляет работать вторичное сообщение l oop (я сомневаюсь, что MessageBoxW сам реализует это l oop, вместо этого полагаясь на DialogBox для выполнения этой работы).

И если бы он не использовал нулевой HWND для фильтра, тогда windows, кроме диалогового окна, даже не было бы окрашено, пока отображается окно сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...