2010-11-22 4 views
1

Quelqu'un a-t-il essayé de modifier le contenu de CallContext à partir d'un menu WPF? Dans notre application, nous avons une chaîne d'environnement stockée dans callcontext - sur le serveur, elle est convertie en une chaîne de connexion db (en utilisant ILogicalThreadAffinative + .net remoting).Modification de CallContext à partir du menu WPF

Sur le client, il est possible de basculer entre les environnements, lorsque les nouveaux threads/fenêtres ont le nouvel environnement - toutes les fenêtres ont un environnement dans le titre de la fenêtre. Le problème est que lorsque cela est fait à partir d'un MenuItem, il semble que WPF pousse le CallContext sur une pile et le renvoie ensuite, rendant impossible de changer.

Je l'ai résolu en insérant une combobox dans le menu - cela semble fonctionner mais n'est pas très agréable. Est-ce que quelqu'un a vu cela et a trouvé une solution?

Répondre

1

Je pense que cela se produit car un clic de souris sur un élément de menu entraînera l'affichage d'une nouvelle opération dans la file d'attente du répartiteur et CallContext n'est pas conservé entre les opérations dans la file d'attente du répartiteur. Pour plus d'informations, voir this.

+0

Je pense que vous avez raison - j'ai également examiné le contexte d'exécution. Je trouve juste incohérent que je puisse changer callcontext à partir d'un bouton dans une fenêtre et d'une combobox dans un menu, mais pas comme une sélection dans un sous-menu. Je pense que cette utilisation de callcontext est ce qu'elle était destinée - donc je me demande si c'est un bug? –

+0

J'ai essayé un petit échantillon et mon callcontext est en cours de réinitialisation pour les deux boutons, les comboboxes et les menus. Donc, le callcontext est toujours vide pour moi, ce qui est bien sûr plus cohérent que ce que vous voyez. –

+0

J'y reviendrai et je verrai ce que je peux trouver - si vous ne pouvez pas changer le callcontext de wpf, cela en enlève une partie de son utilisation. Mon exemple a mis callcontext depuis le début et c'est quand j'essaye de le changer le problème se produit. –

Questions connexes