Что может привести к внезапному закрытию приложения .NET WinForms без диалогового окна?

StackOverflow https://stackoverflow.com/questions/201614

  •  03-07-2019
  •  | 
  •  

Вопрос

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

C# .NET 2.0 Сообщаемые случаи на win XP

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

Это было полезно?

Решение

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

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

Рекомендации по оснащению и просмотру журнала событий Windows также хороши.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top