Почему Visual Studio фокусируется, хотя нет точки останова? - PullRequest
2 голосов
/ 17 мая 2011

в моем приложении нет точки останова, но иногда Visual Studio получает фокус, когда нет причины.(в режиме отладки или не в режиме отладки) (как будто была точка останова)

В чем может быть причина?

1 Ответ

2 голосов
/ 17 мая 2011

Если отладчик не прерывается из-за того, что вы вручную установили точку останова или из-за того, что приложение сгенерировало исключение или обнаружила какую-то другую непредвиденную ошибку, наиболее вероятным объяснением является то, что ваше приложение отказывается от фокуса.

Например, вы уничтожаете окно, которое в данный момент имеет фокус и находится на переднем плане до установки этого фокуса на другое окно в вашем приложении. И затем, поскольку какое-то окно всегда должно быть в фокусе, оконный менеджер устанавливает активацию для следующего доступного окна, которое просто принадлежит Visual Studio. Результирующий эффект будет таким же, как если бы вы нажали Alt + Tab .

У Раймонда Чена есть статья в блоге об этом, Правильный порядок отключения и включения Windows :

Если вы закончили с модальным диалогом, ваш соблазн будет убирать в следующем порядке:

  • Уничтожить модальное диалоговое окно.
  • Повторно включить владельца.

Но если вы сделаете это, вы обнаружите, что активация переднего плана не возвращается к вашему владельцу. Вместо этого он переходит в другое случайное окно. Явная установка активации для предполагаемого владельца «исправляет» проблему, но у вас все еще есть мерцание, и Z-порядок окна-нарушителя полностью испорчен.

Что происходит?

Когда вы уничтожаете модальное диалоговое окно, вы уничтожаете окно с активацией переднего плана. Менеджеру окон теперь нужно найти кого-то еще, чтобы активировать. Он пытается передать его владельцу диалога, но владелец по-прежнему отключен, поэтому диспетчер окон пропускает его и ищет другое окно, которое не отключено.

Вот почему вы получаете странное окно-нарушитель.

Правильный порядок уничтожения модального диалога:

  • Повторно включить владельца.
  • Уничтожить модальное диалоговое окно.

На этот раз, когда модальное диалоговое окно уничтожено, оконный менеджер смотрит на владельца и на этот раз он включен, поэтому он наследует активацию.

Нет мерцания. Нет посторонних.

...