Wie zu verwenden ThreadException?
Versuchte ich mit
http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx#Y399
aber wenn ich das mache
throw new ArgumentNullException("playlist is empty");
Bekomme ich nichts. Ich Wette, ich bin fehlt etwas sehr offensichtlich.
hier ist mein code.
using System;
using System.Security.Permissions;
using System.Windows.Forms;
using System.Threading;
namespace MediaPlayer.NET
{
internal static class Program
{
///<summary>
///The main entry point for the application.
///</summary>
[STAThread]
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
private static void Main()
{
//Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException += new ThreadExceptionEventHandler(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(UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MediaPlayerForm());
}
private static void UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show("UnhandledException!!!!");
}
private static void UIThreadException(object sender, ThreadExceptionEventArgs t)
{
MessageBox.Show("UIThreadException!!!!",
"UIThreadException!!!!", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
Application.Exit();
}
}
}
- die Linie
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
ist nötig für die Handhabung von Ausnahmen, die Erzeugung von threads auf?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code funktioniert gut, es gibt nicht eine Menge von möglichen ausfallarten ich denken kann. Mit einer Ausnahme, es gibt ein problem in der Interaktion zwischen dem debugger und Windows SEH, wenn Sie debug 32-bit-code auf einem 64-bit-Betriebssystem vor Windows 8. Dies kann dazu führen, Ausnahmen werden geschluckt, ohne Diagnose, wenn Sie auftreten, im Load-Ereignis des Formulars oder OnLoad () - Methode überschreiben. Überprüfen Sie die verknüpfte Beitrag für die provisorischen Lösungen, das einfachste Projekt - + - Eigenschaften, Register Erstellen, Platform Target = AnyCPU, deaktivieren Sie "Lieber 32-bit" wenn Sie es sehen.
Im Allgemeinen, macht die entsprechende Sache, die durch die Vermietung nicht die Standard-Ausnahmebehandlung von einer Anwendung.ThreadException-display den dialog. Aber halten Sie es einfach, machen Sie es wie diese:
Nun müssen Sie nie sorgen über eine ThreadException mehr, alle Ausnahmen auslösen der Anwendungsdomäne.UnhandledException-Ereignishandler. Und das "#if", um den code noch können Sie Debuggen eine nicht behandelte exception, die der debugger wird automatisch stoppen, wenn die Ausnahme ausgelöst wird.
Fügen Sie diese auf der UnhandledException-Methode, um zu verhindern, dass die Windows Absturz Meldung von der Anzeige:
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
ist nötig für die Handhabung von Ausnahmen, die Erzeugung von threads auf?#ifndef
im code-snippet und#ifdef
im text. Es sollte#if
in beiden Orten, sollte es nicht? also werfen Sie in den Debug -, Standard - (Fang -) Release.Euch noch nicht zeigen, wo Sie sind, werfen Sie das
ArgumentNullException
. Meine Vermutung ist, dass es entweder innerhalb des Konstruktors derMediaPlayerForm
(was bedeutet, dass es, bevor die message-loop gestartet wurde) oder es in einem anderen thread.Application.ThreadException
behandelt nur Ausnahmen erwischt, die auf Windows Forms-threads message-loops.