Wie zu unterdrücken/catch-System.ObjectDisposedException?
Ich habe eine Anwendung, die sporadisch wirft diese exception:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: "Panel".
bei System.Windows.Forms.Control.CreateHandle()
bei System.Windows.Forms.Control.get_Handle()
bei System.Windows.Forms.ContainerControl.FocusActiveControlInternal()
bei System.Windows.Forms.Form.set_Active(Boolean value)
bei System.Windows.Forms.Form.WmActivate(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Gibt es eine Möglichkeit zu unterdrücken, diese Ausnahme im Idealfall ohne Berührung der code? Ich denke über einige registry-Magie oder Esoterik .NET-configs.
Darüber hinaus bin ich natürlich auch daran interessiert, Möglichkeiten, um diese Ausnahme abfangen. Es scheint keine Haken für mich zum abfangen dieser Ausnahme... Und es ist natürlich nicht reproduzierbar...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Über die exception zu fangen; ich vermute, es ist keine Globale exception-handling in der Anwendung noch?
In Ihrem Programm.cs:
Hinzufügen, und anmutig Behandlung der Ausnahme wäre eine gute Sache für die Nutzer. Wenn Sie fügen Sie einige zusätzliche Protokollierung, es könnte sogar helfen, beseitigen Sie die Ursache für die Ausnahme. Die speziell auf die
ObjectDisposedException
kann erfolgen, indem überprüft den Typ der Ausnahme, die in den oben genannten Handler.UnhandledExceptionEventArgs
bekomme ich dieIsTerminating
- Eigenschaft true ist. Nicht genau das, was ich erwartet hatte.Application.Exit();
zu den sample-code, weil es da sein sollte, imho.program.cs
aber meine Anwendung stürzt immer noch gibt FehlerSystem.ObjectDisposedException: Safe handle has been closed
. überprüfung der StackTrace gibt Linie. 0 und Dateiname leer. Es zeigt keinen Objektnamen"Gibt es einen Weg, das zu beheben die Schmerzen in meinem linken Bein, dass ich jedes mal, wenn ich Schießen selbst in den Fuß? Vielleicht nehmen reichliche Mengen von paracetamol oder ähnliches?"
Hier ist die Antwort nicht zu beheben den Schmerz, es ist die Vermeidung von shooting selbst in den Fuß.
In diesem Fall, es gibt code, der Zugriff auf einen Bereich, der entsorgt wird. Dieser code muss behoben werden, ist die Antwort nicht, die Ausnahme zu unterdrücken, weil Sie wirklich tun haben einen Fehler in Ihrem code. Es ist nicht die Laufzeit, dass ist in der Schuld hier.
Nun, ich sehe aus den Kommentaren, dass Sie ein "quick fix", um wieder zu arbeiten, diese Art von Haltung ist nicht zu helfen, Sie für lange, denn, wie Sie sehen, jede Antwort und mögliche Lösung bringt neue Fragen.
So, anstatt zu verbringen Zeit versuchen, zu schweigen die Laufzeit der Ihnen mitteilt, dass Sie einen Fehler haben, aufhören und den Fehler beheben.
Die Laufzeitumgebung wird versuchen, Ihnen etwas sagen. Nicht ignorieren Sie es! Fangen und ignorieren dabei, dass die Ausnahme nicht machen das problem Weg.
Der spezifischen Ausnahme der Ihnen sagt, dass Sie versuchen, verwenden ein Panel, nachdem er entsorgt wurde. Also im Grunde haben Sie zwei Möglichkeiten: 1) nicht aussetzen, bis Sie fertig sind es zu benutzen. 2) verwenden Sie es nicht, nachdem er entsorgt wurde.
EDIT: helfen Sie das problem zu beheben, Sie können ADPlus zu erstellen dump-Dateien für diese Besondere Ausnahme. Das könnte Ihnen Einblick, warum dies geschieht. John Robbins hat eine Bugslayer Artikel auf, wie zu tun. Bitte sehen http://msdn.microsoft.com/en-us/magazine/cc163530.aspx.