Si consideri il seguente semplice applicazione: un Windows Form creato da una sequenza di "nuova applicazione Windows C#" in VS che è stato modificato in un modo seguente:eccezione Catching in Main() metodo
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show("An unexpected exception was caught.");
}
}
Form1.cs contiene le seguenti modifiche:
private void Form1_Load(object sender, EventArgs e)
{
throw new Exception("Error");
}
Se premo F5 in IDE, allora, come mi aspetto, vedo una finestra di messaggio che tale eccezione è stato catturato e l'applicazione si chiude.
Se si passa a Debug (o Release)/bin e si avvia l'eseguibile, viene visualizzata la finestra standard "Eccezione non gestita", ovvero il mio gestore di eccezioni non funziona.
Ovviamente, questo ha qualcosa a che fare con l'eccezione generata da un thread diverso dal quale viene chiamato Application.Run. Ma la domanda rimane: perché il comportamento varia a seconda che l'applicazione sia stata eseguita da IDE o dalla riga di comando? Qual è la prassi migliore per garantire che nessuna eccezione rimanga non gestita nell'applicazione?
@Corvin: controlla una risposta accettata, se ritieni di avere una soluzione alla tua domanda. –