Marshalling .NET Exceptions between Threads

Introduction

Today I faced a strange issue; I was catching an Exception in a BackgroundWorker’s thread, threw a new exception and handled it in the main GUI thread by showing the exception’s Message in a message box.

The strange thing was, that no matter what I did, the main GUI thread always displayed the message of the first generated exception in the background thread.

Cause

As described by user „nobugz“ in this discussion, the cause is:

This is an architectural limitation to the way exceptions are marshalled from one thread (the BGW’s) to another (the UI thread).  Only a single exception object can get copied, the designers chose the first one thrown as the most likely to be relevant.  You’ll need to work around this restriction.

Interestingly enough this behavior seems to occur only in an Application.ThreadException handler which seems to pick up the exception from somewhere (maybe TLS?)

Resolution

The resolution is to handle the exception directly in the RunWorkerCompleted handler where it gets forwarded to and not to throw the exception any further, until the Application.ThreadException handler of the GUI thread handles it.

Example application

To show the error in a small example project I created a tiny Windows Forms application which you may download from here.

Main Window with erroneous Behavior

When the check box is activated, the erroneous behavior is being performed when clicking the button:

The first generated exception is being displayed to the end user instead the actual one that is being thrown later in the background thread.

Main Window with expected Behavior

When the check box is not activated when clicking the button, the expected result is being displayed; the latest thrown exception:

Summary

I’ve just shown you a case where (in my eyes) the .NET Framework behaves wrong.

Maybe you find this article useful or even prove that I am wrong or how to handle in a more elegant way.

Looking forward for your feedback!

Fehlermeldung „Invalid URI: The hostname could not be parsed.“

Fehlermeldung

Beim Laden aus einer XML-Datei erhielt ein Kunde unseres CMS Zeta Producer folgende Fehlermeldung:

System.UriFormatException

—————–

Invalid URI: The hostname could not be parsed.

—————–

at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at System.Uri..ctor(String uriString, UriKind uriKind)
at System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)
at System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)
at System.Xml.XmlTextReaderImpl..ctor(String url, XmlNameTable nt)
at System.Xml.XmlDocument.Load(String filename)
at Zeta.EnterpriseLibrary.Tools.Storage.PersistentXmlFilePairStorage.load()
at Zeta.EnterpriseLibrary.Tools.Storage.PersistentXmlFilePairStorage.set_FilePath(FileInfo value)
at ZetaProducer.RuntimeBusinessLogic.Code.AppHost.Host.InitializeInstance()
at ZetaProducer.RuntimeMain.Code.AppHost.Host.InitializeInstance()
at ZetaProducer.Main.Code.AppHost.Host.InitializeInstance()
at ZetaProducer.Main.Code.AppHost.Host.process()

Ursache

Ursache war, dass der Kunde Parallels unter Mac OS X verwendet hat um Zeta Producer in einer virtuellen Maschine laufen zu lassen.

Gleichzeitig lagen die „Eigenen Dateien“ auf Mac OS X und wurden via Parallels in die virtuelle Maschine eingebunden.

Der Pfad war sichtbar als:

\\.psf\Home\Documents\Zeta Producer 9

Damit scheint die Uri-Klasse von .NET nicht zurecht zu kommen.

Lösung

Eine schnelle Lösung aus Anwendersicht ist, den UNC-Pfad „\\.psf\Home\Documents\Zeta Producer 9“ als Laufwerksbuchstaben unter Windows zu verbinden und dieses Laufwerk dann als Home-Ordner zu konfigurieren.

Eine programmierte Lösung wird so aussehen, dass ich das Laden eines XmlDocument selbst durchführe (via Stream) und dann den geladenen Stream (bzw. die Zeichenfolgen als string) an das XmlDocument übergebe. So umgehe ich die Uri-Klasse, die wohl mit UNC-Pfaden die mit „.“ beginnen Schwierigkeiten hat.

VW Golf GTI 6 – Eine subjektive Review

Dies ist ein subjektiver Erfahrungsbericht nach 7 Monaten Golf GTI 6.

Achtung! Dieser Bericht hat nix mit Fahrdynamik-Pseudo-Ahnungs-Geschriebsel zu tun. Ich bin Auto-Laie (und stolz darauf). Ich bin schlicht Anwender von Autos. Je einfacher mir die Anwendung des Autos fällt, desto zufriedener werde ich mit dem Auto sein.

Kurzresumee

Golf GTI 6 ist ein Scheiß!

Ausführliche Version des Resumees

Wie bereits angedeutet, ist die Mängelliste meines VW Golf GTI 6 deutlich länger als die meines davor geleasten VW Golf GTI 5 den ich 2005 bekommen habe.

Aus fahrtechnischer Sicht mag der Golf sicher gut sein, das kann ich nicht beurteilen und es ist mir auch relativ wurscht (so lange es gut funktioniert und nicht stört).

Positives

Ich finde vieles positiv beim Golf GTI 6:

  • Die Sitze. Diese sind sehr angenehm zu benutzen, ich fühle mich darin wohl.
  • Die Kopfstütze. Ragt mir fast bis über den Kopf, gibt also im Unfall-Fall hoffentlich guten halt.
  • Die Automatikschaltung (DSG). Sehr schön zu benutzen, fast unmerklich wird geschaltet.
  • Die Hupe klingt auch ganz angenehm.
  • Die Leistung des Motors. Scheinbar 210 PS (Golf 5 „nur“ 199 PS). Kann ich nicht beurteilen, reicht aber bisher immer überall gut aus.
  • Rechter Außenspiegel fährt beim Rückwärtsgang automatisch nach unten für bessere Randsteinsicht.

Negatives

Leider gibt es auch sehr vieles Negatives zu finden das zwar nüchtern betrachtet relativ unerheblich ist, aber kombiniert und über die Zeit betrachtet sind die Mängel viel zu viel.

Als Zitat aus der eingangs erwähnten Mängelliste hier nochmals die größten Ärgernisse aufgelistet:

  • Nach dem Starten der Zündung fängt in 90% der Fälle das Radio an zu spielen, obwohl beim vorherigen Abstellen des Fahrzeugs Media-In (also der iPod-Anschluß) aktiviert war.
  • Mindestens ein mal pro Fahrt, ca. alle 1/2 bis 1 Stunde bucht sich das Bluetooth Telefon aus und wieder ein, mit entsprechender Unterbrechung der Musik und entsprechend lauten Signaltönen. Dies tritt auch dann auf, wenn ich mein Bluetooth-Telefon gar nicht im Auto dabei habe.
  • Die Innenverkleidung der Fahrertür klappert.
  • Alle 2-3 Wochen wird der iPod nicht erkannt (“Kein Medium angeschlossen”) und erst nach ca. 10 Minuten nach Fahrtbeginn wir Media-In wieder korrekt erkannt.
  • Beim Auswählen und anschließendem Abspielen eines Musikstücks (iPod) vergisst die VW-Bedienoberfläche den zuvor ausgewählten Navigationspfad. So muss bei jedem Liedwechsel wieder “iPod -> Interpreten -> Alben -> Musikstück” ausgewählt werden. Dies ist jedesmal mit ca 1-2 Minuten Aufwand bei jedem Liedwechsel verbunden.
  • Jedes Mal beim Losfahren ist für ca. 1 Minute ein deutliches Surren aus dem Armaturenbrett kommend im Innenraum zu hören (für Fahrer und Beifahrer), als ob ein Schrittmotor sich einstellt. (Ergänzung: Das war übrigens das DVD-Laufwerk; als ich die Navi-DVD entfernt habe, hat das aufgehört)

Hinzu kommen noch systembedingte Ärgernisse die stören:

  • Die Einparkhilfen in Form von Abstand-Sensoren die durch Piepgeräusche die Entfernung zum Hindernis akustisch signalisieren: In meiner Tiefgarage muss ich sehr eng rangieren, und 3 mal vor- und zurücksetzen. Da sich die Einpark“hilfe“ immer mit dem Rückwärtsgang einschaltet, schalte ich also 6 mal täglich (morgens ins Büro, abends heim) die Einparkhilfe aus, da ansonsten in der engen Tiefgarage ein Dauer-Sinus-Ton meine Nerven sowie die Jaulsensoren von Jara überstrapazieren würden.
  • Relativ laute Fahrtwind-Geräusche ab Autobahngeschwindigkeit. Das wird in dieser Auto-Preisklasse halt einfach nicht besser gehen.
  • „Easy Entry“ heißt bezeichnenderweise übrigens der Mechanismus mit dem die Vordersitze für hinten einsteigende Personen und Gegenstände geklappt werden können. Das ist die abartigste Funktion die ich je in einem Auto gesehen habe. So kompliziert und schwer gängig zu bedienen und gleichzeitig so sinnlos im Nutzen, dass es eine wahre Freude ist. Der „Easy“-Namen dazu ist purer Sadismus des Designers, da bin ich von überzeugt.

Alltäglicher Umgang

Wenn ich morgens ins Büro fahre, steige ich zunächst ins Auto ein, schnalle mich an, mache die Zündung an.

Reflexartig drehe ich den Ton auf stumm, da in 90% der Fälle ja Radio angeht, obwohl am Abend davor iPod aktiv war. Ich hasse hasse hasse Radio.

Alternativ drehe ich nicht auf stumm sondern versuche gleich den am „Media-in“-Anschluss angeschlossenen iPod durch Drücken auf die „Media“-Taste auszuwählen.

Das Stumm-Drehen gelingt leider erst nach einer Weile, genau so wie die „Media“-Taste eine Aufwärmphase von 20-30 Sekunden zu benötigten scheint (Werkstatt hat mal was von „Bus“ gesprochen, ich habe aber einen PKW, keinen Bus. Seggl der!).

Nun bin ich inzwischen so weit vorgefahren, dass ich das erste mal zurücksetzen kann.

Gleichzeitig versuche ich nun: Rückwärtsgang einlegen, Parkasisstent-Taste zum Ausschalten der Piepgeräusche zu drücken und die Lautstärke erneut runterzudrehen, da die auf dem Bildschirm inzwischen erscheinende visuelle Einparkhilfe die zuvor unternommenen Bemühungen der Lautstärke-Stummschaltung bzw. der „Media“-Taste unterbrochen und somit zunichte gemacht haben.

Dieses Procedere führe ich 3 mal durch. Dann bin ich draußen aus der Tiefgarage und fahre ins Büro.

Wenn ich Glück habe bucht das Bluetooth-System mein iPhone nicht aus und wieder ein (jeweils durch einen ohrenbetäubenden Signalton signalisiert); meistens habe ich Pech.

Während der Fahrt habe ich noch wahlweise zusätzlich folgende akustische Bereicherungen: Signalton wenn es unter 4°C wird („Frost“, haha), Signalton wenn ich tanken sollte.

Völlig reizüberflutet komme ich im Büro an.

Abends auf dem Heimweg dann jeweils dasselbe „in grün“, wie das wohl heißt.

Danach falle ich entspannt ins Bett und träume von Autos bei denen Apple die Usability entworfen hat.

Resumee

Ich war mit dem Golf GTI 5 sehr zufrieden, mit dem Golf GTI 6 bin ich deutlich weniger zufrieden.

Wie es der Hersteller geschafft hat, gute Funktionen konsequent zu verschlechtern und schlechte Funktionen beizubehalten finde ich gleichzeitig faszinierend und traurig.

Ggf. erwarte ich zu viel von einem Auto dieser Preisklasse; da es aber bereits bessere Produkte (Golf 5) gab, bin ich trotzdem verärgert.

Ich hoffe dieser Artikel hilft dem einen oder anderen bei der Kaufentscheidung für oder gegen einen Golf.

Kurzzeit-Vergesslichkeit

Seit Beginn der Zeitrechnung leide ich an einem Symptom das ich als „Kurzzeit-Vergesslichkeit“ bezeichne:

Kleine Dinge die ich mir vornehme zu machen vergesse ich durchzuführen.

Beispielsweise gestern Morgen, wollte ich ein Laib Brot von zu hause mit ins Büro nehmen. Nach dem Aufstehen das Brot aus dem Kühlschrank genommen und im Flur deponiert. Vormittags im Büro habe ich dann Hunger bekommen und festgestellt, dass ich das Brot daheim vergessen hatte.

Weiteres Beispiel: Gestern Abend im Büro die „Herr Bello“-DVD zum Mitnehmen vorbereitet; daheim aufm Sofa mit Jana dann nach einer Stunde festgestellt, dass die DVD noch im Büro liegt.

Oder früher zu Schulzeiten; Einmal hat mich der Busfahrer raus geworfen, weil ich 3 Tage in Folge vergessen habe die Monatskarte für den neuen Monat von zu hause einzustecken. Ich habe jedes mal beim Aufstehen dran gedacht und jedes mal dann im Bus wieder festgestellt, dass sie noch zu hause liegt.

Andererseits kann ich mir wichtige Dinge, Termine, usw. sehr gut merken. Ich bin immer überpünktlich zu Terminen und habe Aufgaben meistens schon weit vor Fristende erledigt. Manchmal wenn ich keine Termine habe, überlege ich sogar ob ich welche vergessen habe.

Nur die Kurzzeit-Vergesslichkeit bei (aus meiner Sicht) kleinen, unwichtigen Dingen, die bekomme ich scheinbar nicht weg.

Ich könnte mir zwar alles aufschreiben, aber bisher waren solche Vergesslichkeiten (fast) immer harmlos, so dass der Leidensdruck sehr gering war.

Und irgendwann kann ich eh alles aufs Alter schieben. Mit Jogi haben wir uns fest vorgenommen, dass wenn wir mal alte Rentner sind, wir uns zusammen in die Fußgängerzone setzen und Leute beleidigen. Falls uns dann jemand blöd kommt, machen wir auf „senile alte Opas“ und sind fein raus.

Neue DVD gekauft: „Herr Bello“

Die liebe Jana hat seinerzeit („ihrerzeit“?) während des Tierarzt-Studiums in München als Komparsin in einem Film mitgespielt:

Herr Bello

Da sie selbst nie nachgeschaut hat, ob sie im Film auch tatsächlich zu sehen ist, habe ich dieses Vorhaben jetzt in Angriff genommen und den Film gekauft.

Heute oder morgen werden wir auf Spurensuche gehen, auch wenn der Film ggf. schwer zu konsumieren ist.

Neues Küchen-Spielzeug

Gestern für 13 Euro im Marktkauf Göppingen erstanden:

Ein Dressingsprayer.

Das ist eine Sprühdose in die Essig eingefüllt wird, dann ein paar mal kurz aufpumpen und anschließend auf den Salat sprühen.

Der Vorteil zum bloßen Drüberleeren von Essig ist, dass weniger Essig auf die Salatblätter kommt und dass der Essig gleichmäßiger verteilt ist.

Ich liebe ja Essig, aber nach einem ersten Test gestern habe ich zum ersten mal im Leben tatsächlich auch den Salat herausgeschmeckt und nicht nur den Essig.

Sehr empfehlenswert.

Bildergalerie

Nachfolgend noch ein paar Bilder vom Gerät.

Ende.

Selbstbau-Hundehöhle

Gestern spontan den zweiten Hundekorb verkehrtherum über den ersten Hundekorb gelegt, während die Jara grad drin lag:

Macht eine super Hundehöhle:

Ich glaube ihr hat’s gefallen.

Sollte ich mir patentieren lassen, falls es so was nicht eh‘ schon gibt.

Lineare Einhebelmischer erhältlich?

Ihr kennt doch bestimmt diese praktischen Wasserhähne namens „Einhebelmischer„:

Also ein einzelner Hebel um zwischen warm und kalt zu wechseln.

Theoretisch.

Tatsächliche Funktionsweise

Praktisch sieht das bei den bisher von mir erlebten Wasserhähnen an Duschen und Waschbecken ungefähr so aus:

Es gibt einen großen Bereich in dem das Wasser eiskalt herausströmt, und es gibt einen Bereich in dem das Wasser kochend heiß herausströmt.

Dazwischen gibt es einen klitzekleinen Bereich in dem das Wasser angenehm für mich ist.

Interessanterweise ist dieser Bereich nicht genau in der Mitte sondern meist irgendwo „versetzt“ angeordnet. Je nach dem aus welcher Richtung ich den Hebel bewege ist der Bereich scheinbar auch an anderen Stellen.

Beispielsweise wenn ich den Hebel von links nach rechts bewege ist der angenehme grüne Bereich wie in obigem Bild; komme ich von rechts nach links ist der Bereich an einer ganz anderen Stelle:

Gewünschte Funktionsweise

Mein Wunsch wäre ein Wasserhahn, dessen blauer, roter und grüner Bereich nahtlos linear ineinander übergeht.

Von eiskalt über lauwarm, warm, wärmer, heiß, jeweils sanft und unmerklich die Stufen durchlaufen. Und zwar aus beiden Richtungen kommend.

So was habe ich (bewusst) bisher noch nie erlebt.

Mögliche Gründe

Mir fallen ein paar Gründe ein, warum es so einen Wasserhahn nicht gibt:

  • Keine Nachfrage nach solch einer Funktion, bzw. diejenigen die Wasserhähne kaufen (z.B. Architekten) sind nicht die die sie später anwenden (z.B. Hausbesitzer). Deshalb wird rein über den Preis eingekauft, nicht über die Funktion.
  • Die Wasserhähne sind bereits linear, nur der Mensch empfindet es nicht als linear aufgrund der Beschaffenheit von seiner Haut/o.Ä. In diesem Fall müssten die Wasserhähne dann eben mit nichtlinearem Kurvenverlauf ausgestattet werden der dem Anwender dann wie eine lineare Kurve vorkommt.
  • Gedankenlosigkeit der Hersteller, wie z.B. auch beim Größenverhältnis von Wasserhahn zu Waschbecken.

Sind Flaschner oder Produktdesigner, z.B. von Grohe hier als Leser anwesend?