myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Exceptions in Events sollen nicht von "Forms" behandelt werden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Exceptions in Events sollen nicht von "Forms" behandelt werden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Quaneu Quaneu ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3126.jpg


Dabei seit: 22.10.2008
Beiträge: 522
Entwicklungsumgebung: VS 2008 / 2010 Ultimate C#
Herkunft: Regensburg


Quaneu ist offline

Exceptions in Events sollen nicht von "Forms" behandelt werden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich habe folgendes Problem mit Exception Handling in Forms.

Ich habe eine DLL, die ein Window anzeigen kann. Nun kann es vorkommen das die DLL Exceptions wirft, wenn z.B. fehlerhafte Daten ausgemacht werden usw. Dies kann jedoch auch in Event-Handlern der Form passieren. Jedoch greift hier dann das Exception Handling von Forms, d.h. der User bekommt die Exception in einer Art MessageBox zu sehen, bei der jedoch auch Continue klicken kann, was zu schwerwiegenden Fehlern führen kann.

Daher meine Frage, wie kann man in einer DLL diese Verhalten abstellen? In einer Application geht dies wohl über ThreadException und UnhandledException. Kann man dies auch für DLLs anwenden, wenn Sie z.B. Von Matlab benutzt werden?

Viele Grüße
Gennaro

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Quaneu am 03.05.2012 21:25.

Neuer Beitrag 03.05.2012 21:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.200


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Fenster das du meinst ist wahrscheinlich das von der Laufzeitumgebung?

Fang Exceptions am besten selber da ab wo sie passieren können. In einen Handler für unhandled exceptions zu springen hilft dir auch nur bedingt. Du weißt dann dass irgendwo was schief gelaufen ist, aber du kannst da nichts mehr korrigieren.
Neuer Beitrag 04.05.2012 06:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.568
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Quaneu,

Exceptions kann normalerweise nur der Aufrufer angemessen behandeln. Wenn der Aufrufer ein Form bzw. dessen EventHandler ist, dann ist es Aufgabe des Forms bzw. des EventHandlers, die Exceptions korrekt zu behandeln. Dass dafür Kenntnis über die DLL und die Bedeutung/Auswirkung ihrer Exceptions erforderlich ist, ist ganz normal. Das GUI kann und darf das Modell kennen und wird das normalerweise auch tun.

Wenn es dir darum geht, die Exceptions immer auf die gleiche Weise zu behandeln, egal wer der Aufrufer ist, kannst du einen Wrapper/Adapter bzw. eine Facade schreiben. Diese sollte dann aber ohne GUI(-Zugriff) und ohne Benutzerinteraktion auskommen. Das Form würde dann statt der DLL den Wrapper benutzen.

herbivore
Neuer Beitrag 04.05.2012 08:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Quaneu Quaneu ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3126.jpg


Dabei seit: 22.10.2008
Beiträge: 522
Entwicklungsumgebung: VS 2008 / 2010 Ultimate C#
Herkunft: Regensburg

Themenstarter Thema begonnen von Quaneu

Quaneu ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank für eure Beiträge.

Zitat:
Exceptions kann normalerweise nur der Aufrufer angemessen behandeln.

Dies stimmt natürlich, doch habe ich Exceptions die gar nicht gefangen werden sollen, da sie z.B. auf Programmierfehler hindeuten bzw. hat die DLL einen gewissen Satz von Exceptions die geworfen werden können.
Der Kunde bzw. Nutzer kennt diese und behandelt diese selber. D.h. es gibt Exceptions die nicht gefangen werden sollen. Wird so eine Exception jedoch in einem Event geworfen, behandelt sie Forms selber und dies ist das unerwünschte Verhalten.

Viele Grüße
Quaneu
Neuer Beitrag 04.05.2012 12:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.568
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Quaneu,

Zitat:
Wird so eine Exception jedoch in einem Event geworfen, behandelt sie Forms selber und dies ist das unerwünschte Verhalten.

mal abgesehen davon, dass unbehandelte Exceptions das Programm zum Absturz bringen und die Meldung, die dann zwangsläufig (da das Programm schon terminiert ist) vom Betriebssystem erzeugt wird, nicht immer den Text der Exception erkennen lässt, es also besser ist, dass man jede Exception fängt und selber für deren Anzeige und Protokollierung sorgt, selbst wenn man das Programm anschließend sofort beendet, kannst du im Form bzw. dessen EventHandler natürlich selbst entscheiden, welche Exceptions du fängst und damit auch welche nicht, so dass im Form also entschieden werden kann, welche Exception das Form behandeln soll und welche unbehandelt gelassen werden.

Was im Zitat steht, ist also keineswegs gottgegeben, sondern nur eine bestimmte Implementierung, die du auch ändern kannst.

herbivore
Neuer Beitrag 05.05.2012 09:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.200


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Quaneu:
Der Kunde bzw. Nutzer kennt diese und behandelt diese selber.

Wie kann der Nutzer eine solche Exception behandeln? Er kann ja höchstens feststellen dass was nicht funktioniert hat und sich dann überlegen was er jetzt alles nochmal machen muss, damit es vielleicht doch noch funktioniert.

Du kannst außerdem ja selbst eine MessageBox anzeigen, dann hättest du einen ähnlichen Effekt wie das Fenster vom Betriebssystem. Mit dem Unterschied dass die Excecption dann nicht weiter durchschlägt. Und du kannst selber entscheiden ob ein "Continue" in irgendeiner Form passieren darf, oder ob das Programm beendet werden soll.
Neuer Beitrag 05.05.2012 11:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 19.06.2013 01:11