2017-02-13 4 views
-2

У меня есть приложение WinForms, и Program.cs выглядит примерно так:исключения Поймать в WinForms без остановки приложения

static void Main() 
{ 
    try 
    { 
     // Set up application 
     Application.Run(); 
    } 
    catch (Exception ex) 
    { 
     // construct log from ex 
     log.Save(); // saves to db 
    } 
} 

Это работает нормально, и журнал сохраняются в базе данных в соответствии с требованиями , Однако приложение закрывается впоследствии.

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

+2

Возможная Дубликат [Исключения приложений уловили в Windows Forms Application] (http://stackoverflow.com/questions/6291933/catch-application-exceptions-in-a-windows-forms-application) – MadOX

+1

Это слишком широка, чтобы отвечать без конкретной проблемы с кодом, показывающей, что вы испытываете с примером. Ответ, очевидно, гласит: «Конечно, есть способ!» Но это так же хорошо, как и получается. –

+1

Возможный дубликат http://stackoverflow.com/questions/5762526/how-can-i-make-something-that-catches-all-unhandled-exceptions-in-a-winforms-a –

ответ

2

Посмотрите на событие AppDomain.FirstChanceException.

Однако вы можете действительно захотеть пересмотреть свою архитектуру; в общем, вы не может изящно оправиться от произвольного Exception.

-1

Вы можете использовать событие Application.ThreadException.

Прежде чем позвонить Application.Run, переместите делегат к событию.

Application.ThreadException += (s, e) => 
{ 
    // construct log 
    log.Save(); 
} 
+0

Уход за разъяснением нижнего уровня? –