In WinForms che uso:equivalente di System.Windows.Forms.Application.ThreadException per l'applicazione o il servizio Windows Console o qualsiasi processo in generale
- System.Windows.Forms.Application.ThreadException
- sistema. Windows.Application.UnhandledException
Cosa devo usare per un'applicazione multi-thread non Winform?
Si consideri il codice completo di seguito in C# .NET 4.0: tonnellate
using System;
using System.Threading.Tasks;
namespace ExceptionFun
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Task.Factory.StartNew(() =>
{
throw new Exception("Oops, someone forgot to add a try/catch block");
});
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//never executed
Console.WriteLine("Logging fatal error");
}
}
}
ho visto di domande simili su StackOverflow, ma nessuno conteneva una risposta soddisfacente. La maggior parte delle risposte sono di tipo: "Dovresti includere la corretta gestione delle eccezioni nel tuo codice" o "Usa AppDomain.CurrentDomain.UnhandledException".
Modifica: Sembra che la mia domanda sia stata fraintesa, quindi l'ho riformulata e ho fornito un esempio di codice più piccolo.
Questo appare come un duplicato di http://stackoverflow.com/questions/3133199/net-global-exception-handler-in-console-application – Jodrell
In generale, per il log dovrebbe essere utilizzato un gestore di eccezioni globale. Dovresti gestire localmente se c'è qualcosa di sensato che puoi fare riguardo all'eccezione. – Jodrell
Questo dovrebbe funzionare bene. Ovviamente non si desidera utilizzare try/catch, che impedisce l'esecuzione del gestore eventi UnhandledException. Non devi prenderti cura di Die() te stesso, è automatico. –