Если отладчик не прерывается из-за того, что вы вручную установили точку останова или из-за того, что приложение сгенерировало исключение или обнаружила какую-то другую непредвиденную ошибку, наиболее вероятным объяснением является то, что ваше приложение отказывается от фокуса.
Например, вы уничтожаете окно, которое в данный момент имеет фокус и находится на переднем плане до установки этого фокуса на другое окно в вашем приложении. И затем, поскольку какое-то окно всегда должно быть в фокусе, оконный менеджер устанавливает активацию для следующего доступного окна, которое просто принадлежит Visual Studio. Результирующий эффект будет таким же, как если бы вы нажали Alt + Tab .
У Раймонда Чена есть статья в блоге об этом, Правильный порядок отключения и включения Windows :
Если вы закончили с модальным диалогом, ваш соблазн будет убирать в следующем порядке:
- Уничтожить модальное диалоговое окно.
- Повторно включить владельца.
Но если вы сделаете это, вы обнаружите, что активация переднего плана не возвращается к вашему владельцу. Вместо этого он переходит в другое случайное окно. Явная установка активации для предполагаемого владельца «исправляет» проблему, но у вас все еще есть мерцание, и Z-порядок окна-нарушителя полностью испорчен.
Что происходит?
Когда вы уничтожаете модальное диалоговое окно, вы уничтожаете окно с активацией переднего плана. Менеджеру окон теперь нужно найти кого-то еще, чтобы активировать. Он пытается передать его владельцу диалога, но владелец по-прежнему отключен, поэтому диспетчер окон пропускает его и ищет другое окно, которое не отключено.
Вот почему вы получаете странное окно-нарушитель.
Правильный порядок уничтожения модального диалога:
- Повторно включить владельца.
- Уничтожить модальное диалоговое окно.
На этот раз, когда модальное диалоговое окно уничтожено, оконный менеджер смотрит на владельца и на этот раз он включен, поэтому он наследует активацию.
Нет мерцания. Нет посторонних.