Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Normale Exceptions nicht anzueigen

  Alt 5. Sep 2007, 18:25
Hi,

nur die Daten kopieren hätte den Nachteil, dass spezielle Eigenschaften spezieller Exceptions ignoriert würden. Oder war gemeint, einfach die Instanz der Exception zuzuweisen (da du Message := OldException geschieben hast, Message ist ja ein String-Property, das würde so also gar nicht gehen). Beim speichern der Instanz wäre das Problem mit dem Freigeben.

Ein if Silent then ... geht am eigentlichen Problem dabei, denn an übergeordneter Stelle wären solche Exceptions 1. nicht mehr abfangbar und 2. ist dort gar nicht bekannt, ob sie still sein sollten (falls dort das if silent then hinkommen sollte).

Der Vergleich mit dem Auto hat ein kleines Problem. Würdest du bei einem Unfall zum Bescheid sagen einen weiteren Unfall riskieren?

Nehmen wir an, irgendwo auf einer Komponente wird ein Bild gezeichnet, und es tritt eine Exception auf, eine Meldung wird angezeigt. Der User klickt auf OK, die Komponente ist nicht mehr von der MessageBox verdeckt und so muss das Bild neu gezeichnet werden, was wieder fehlschlägt. Natürlich ließe sich für diesen Fall speichern, dass dieses Bild irgendwie defekt ist, aber das wäre ein beispiel, wo man auch solche stillen Exceptions nehmen könnte. Und das würde eventuell trotzdem beim nächsten Bild (falls diese wechseln, da ein Fehler davon noch nicht bekannt ist) möglicherweise wieder zu einer Exception führen. Beispielsweise bei einer defekten Diskette oder CD.

Oder es werden Zeitabhängig bestimmte Dinge getan (einfachstes Beispiel wäre ein Timer) und dort treten ab und zu Exceptions auf. Das wäre richtig nervend für den User, da er dann eventuell neue Exceptions bekommt, bevor er aus OK geklickt hat. Wie gesagt, einfach die Exceptions durch leeren except-Block schlucken will ich nicht, aber ausblenden will ich sie. Das bedeutet aber nicht, dass diese Exception, falls sie ganz woanders auftritt, auch nicht angezeigt werden soll.

Stattdessen will ich nur in meinem Code aus den Exceptions (aus fremden Code oder aus der VCL) in stille Exceptions umwandeln, sie aber noch abfangbar lassen.

Also, Eigenschaften kopieren ist eine Lösung, jedoch nicht allgemein genug, da eine Exception-Klasse auch neue Eigenschaften einführen kann, und ich will nicht für jede eventuelle Exception, die auftreten könnte, eine neue stille Exception einführen, wenn es eine bessere Möglichkeit gibt.

Eventuell weiß ja jemand, wie man das freigeben einer Exception-Klasse verhindern kann, dann köntne mein oben geschilderter Ansatz nämlich funktionieren. Wenn nicht, muss ich es, so wie es jetzt aussieht, wohl oder übel wie von TP vorgeschlagen, per Eigenschaften kopieren machen.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat