I haben einen Test winforms app mit ThreadExceptionHandler dass ein Meldungsfeld angezeigt wird, wenn eine nicht behandelte Ausnahme gefangen wird, wie folgt:ThreadExceptionHandler Fang Ausnahme nicht in MainFrm Konstruktor
[STAThread]
static void Main()
{
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show("error caught");
}
Wenn ich erzwingen einen Fehler in der Ctor der Form 1 (zB DivideByZero) wie folgt:
public Form1()
{
InitializeComponent();
int i = 0;
int x = 5/i;
}
und die App außerhalb von Visual Studio (in Windows 7) laufen, die Division durch Null Ausnahme ist nicht behandelt - ich bekomme ein wenig hilfreich „WindowsFormApplica tion1 hat aufgehört zu arbeiten ... "Nachricht.
Allerdings,, wenn ich die divebyzero Ausnahme auf das Form1_Load Ereignis verschieben und erneut ausführen, wird die Ausnahme ordnungsgemäß behandelt.
Kann jemand erklären, warum das der Fall ist? Der Grund, warum ich dieses Testprogramm ausgeführt habe, ist, dass ich ein ähnliches unbehandeltes Ausnahmeproblem in einer anderen Unternehmensanwendung erfahre, die ich aufzuspüren versuche.
+1 - Ihre klare Beschreibung schlägt meine ... :) –