Исключения в Catch приложениях в приложении Windows Forms

Есть ли все равно, чтобы поймать ожидания, которые бросаются где-нибудь в коде? Я хотел бы перехватывать исключения и обрабатывать их подобным образом, а не писать блоки try catch для каждой функциональности.

В приложениях Windows Forms, когда исключение выбрасывается где угодно в приложении (в основном streamе или во время асинхронных вызовов), вы можете поймать его, зарегистрировавшись для события ThreadException в приложении. Таким образом, вы можете обрабатывать все исключения таким же образом.

Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod); private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t) { //Exception handling... } 

Я думаю, что это близко, так как вы можете получить то, что ищете в приложении формы выигрыша.

http://msdn.microsoft.com/en-us/library/ms157905.aspx

 // Add the event handler for handling UI thread exceptions to the event. Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException); // Set the unhandled exception mode to force all Windows Forms errors to go through // our handler. Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); // Add the event handler for handling non-UI thread exceptions to the event. AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

Без выполнения всех этих шагов вы рискуете получить некоторые исключения, которые будут необработаны.

Очевидным ответом является установка обработчика исключений в верхней части вашей цепочки выполнения.

 [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new YourTopLevelForm()); } catch { //Some last resort handler unware of the context of the actual exception } } 

Это приведет к любым исключениям, которые возникают в вашем главном streamе графического интерфейса. Если вы также хотите глобально перехватывать исключения, которые встречаются во всех streamах, вы можете подписаться на событие AppDomain.UnhandledException и обрабатывать его.

 Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod) private static void MyCommonExceptionHandlingMethod( object sender, ThreadExceptionEventArgs t) { //Exception handling... } 

Код, скопированный из ответа Харита Дж

Теперь о совете …

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

Структурированная обработка исключений может показаться ненужной накладной, которую вы можете обойти с уловкой, но она существует, потому что это не так. Более того, эта работа должна быть выполнена, поскольку код написан, когда разработчик имеет новую логику в своем уме. Не ленитесь и оставите эту работу позже, или еще для того, чтобы какой-нибудь более опытный разработчик подобрал.

Извиняюсь, если вы уже знаете и делаете это.

См. AppDomain.UnhandledException и Application.ThreadException .

Вы можете подписаться на событие AppDomain.UnhandledException

  • Обработка исключений Async с void
  • попробуйте поймать окончательный вопрос
  • Почему я не могу получить общее исключение в C #?
  • Обработка исключений - это хороший способ?
  • Должны ли вы сообщать текст сообщений об исключениях?
  • Служба имеет нулевые приложения (неинфраструктурные) конечные точки
  • Обработка исключений в запросах ajax JSF
  • Насколько медленны исключения Java?
  • Какие части реального мира Haskell теперь устарели или считаются плохой практикой?
  • Зачем использовать в C #?
  • Обработка исключительных ситуаций ASP.NET Core Web API
  • Давайте будем гением компьютера.