2010-11-22 8 views
1

Hat jemand versucht, Inhalt des CallContext von einem WPF-Menü zu ändern? In unserer App haben wir eine Umgebungs-String in Call-Context gespeichert - auf dem Server wird es in eine DB Connectionstring konvertiert (mit ILogicalThreadAffinative + .net Remoting).CallContext Änderung von WPF-Menü

Auf dem Client ist es möglich, zwischen den Umgebungen zu wechseln, wenn die neuen Threads/Windows die neue Umgebung geändert haben - alle Fenster haben eine Umgebung im Fenstertitel.

Das Problem ist, dass, wenn dies von einem MenuItem getan wird, es scheint, dass WPF den CallContext auf einen Stapel stößt und es danach wieder zurückstellt, was es unmöglich macht, es zu ändern.

Ich habe es gelöst, indem ich eine Combobox in das Menü eingefügt habe - das scheint zu funktionieren, ist aber nicht so schön. Hat jemand das gesehen und eine Lösung gefunden?

Antwort

1

Ich denke, dies passiert, weil ein Mausklick auf einen Menüeintrag eine neue Operation in die Dispatcher-Warteschlange gebucht und CallContext nicht zwischen den Operationen in der Dispatcher-Warteschlange beibehalten wird.

Weitere Informationen finden Sie unter this.

+0

Ich denke, Sie haben Recht - ich habe auch in den Ausführungskontext geschaut. Ich finde es nur widersprüchlich, dass ich callcontext von einer Schaltfläche in einem Fenster und von einer Combobox in einem Menü ändern kann, aber nicht als Auswahl in einem Untermenü. Ich denke, diese Verwendung von Callcontext ist, wofür es gedacht war - also frage ich mich, ob es ein Bug ist? –

+0

Ich habe ein kleines Sample ausprobiert und mein Callcontext wird für beide Buttons, Comboboxen und Menüs zurückgesetzt. So ist der Callcontext für mich immer leer, was natürlich konsistenter ist als das, was Sie sehen. –

+0

Ich werde es nochmal anschauen und sehen, was ich mir einfallen lassen kann - wenn man den Callcontext von WPF nicht ändern kann, nimmt es einen Teil davon aus. Mein Beispiel hat callcontext von Anfang an gesetzt, und wenn ich versuche, es zu ändern, tritt das Problem auf. –