Выход из приложения Windows Forms после изменения темы - PullRequest
0 голосов
/ 15 декабря 2009

Я создаю приложение, которое имеет RichTextBox, в котором есть текст разных цветов в зависимости от того, что представляет информация (красный для ошибок, черный для стандартных сообщений и т. Д.). Я пытаюсь поддерживать темы Windows и возможные различия системных цветов. Для этого я создал метод изменения цветов текста по умолчанию на основе системного цвета Window, в результате чего каждый цвет становится светлее или темнее, чтобы он хорошо контрастировал.

Однако во время тестирования этой системы я обнаружил, что если я изменяю тему во время работы программы, она молча завершается, без каких-либо объяснений или даже исключений. Это просто выходит. Я попытался установить точку останова после вызова Application.Run, и Windows зависла на экране «Пожалуйста, подождите ...», который выдает проводник, пока он изменяет тему. Через минуту экран исчез, и, конечно же, точка останова была достигнута, что означает, что он не убивает процесс напрямую.

Мой вопрос: , почему он это делает, и есть ли способ, которым я могу помешать ему это сделать?

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Лучший способ отладить это - добавить обработчик события FormClosing в форму и установить для нее точку останова. Когда он прерывается, callstack показывает, какой код вызывает метод Close ().

В одном классическом режиме отказа с событием SystemEvents.UserPreferenceChanged, которое вы используете, вы забыли отменить регистрацию вашего обработчика событий при закрытии формы. Это статическое событие, оно не позволит форме, которая связывает событие, собирать мусор. Когда событие запускается, вы, скорее всего, получите исключение ObjectDisposedException. Но это только предположение.

0 голосов
/ 15 декабря 2009

Когда я начал делать winforms после долгого времени работы с ASP.NET, меня удивило то, что он использовал исключения без слов. Вы должны обернуть ваш Application.Run (новый MDIParent1 ()) в блок try catch.

Также у вас есть:

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