Что может вызвать внезапное закрытие приложения .NET WinForms без диалогов? - PullRequest
3 голосов
/ 14 октября 2008

Сообщается, что наше приложение WinForms иногда просто закрывается само по себе. Он не отображает ни наше собственное диалоговое окно отправки сообщения об ошибке, ни Windows-сообщение об ошибке, он просто закрывается и исчезает, часто, когда человек был afk и ничего не делал с приложением. Кажется, это редкий случай, может быть, как 2-3 раза в месяц, и это произошло с более чем одним человеком. Я понятия не имею, с чего начать с получения репродукции или с чего начать.

C # .NET 2.0 Отмеченные случаи находятся на Win XP

У кого-нибудь есть идеи?

Ответы [ 3 ]

4 голосов
/ 14 октября 2008

Переполнения стека из-за бесконечной рекурсии являются основной причиной выхода приложений без предупреждения. Если вы не сделали что-то преднамеренное, чтобы вызвать тихий выход, то необработанные исключения (кроме переполнения стека) обычно будут отображать некоторый интерфейс перед завершением работы приложения. Переполнение стека является наиболее распространенным исключением (к сожалению, извините) из этого правила.

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

Хороши также предложения по инструментированию и просмотру журнала событий Windows.

3 голосов
/ 14 октября 2008

Исключения приведут к исчезновению приложения. Проверьте журналы событий, чтобы увидеть, было ли там что-нибудь.

Проверьте диспетчер задач, чтобы увидеть, если процесс все еще присутствует, когда окно исчезает. У меня был сбой проводника, и я не мог перерисовать окно, пока оно не было Alt-Tabbed или Switched-To (из диспетчера задач).

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

0 голосов
/ 14 октября 2008

Вы можете добавить некоторую логику в событие FormClosing, чтобы спросить пользователя, действительно ли это то, что он действительно хочет сделать, затем вы можете отменить событие закрытия, и ваше приложение продолжит работу, если все в порядке. Если вы продолжаете замечать эту проблему, и она никогда не выполняет вашу логику, вам придется запачкать руки в отладчике.

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