Followup:The uncatchable exception, pt 2L'exception uncatchable
J'écris un moteur de liaison personnalisée; mon convertisseur est appelé avant que DataContext soit défini sur l'élément cible. Ceci en soi n'est pas un gros problème car il sera mis à jour lorsque DataContext reçoit finalement une valeur. Qu'est-ce est causant des problèmes est le NullReferenceException que je reçois en raison de DataContext étant nul, cela ne semble pas vouloir être intercepté.
Même si je tente d'attraper l'exception dans mon convertisseur de valeur:
try {
return ((MethodInfo)_member).Invoke(parameter, null);
} catch {
return null;
}
Pour une raison quelconque le débogueur est encore à l'arrêt de ce point.
alt text http://i50.tinypic.com/2ewm6oo.png
(Ceci est sauvegardé dans la pile tracer un bit à l'endroit où le bloc de prise est - à l'exception réelle se produit à l'intérieur de la méthode de _Membre la partie impaire est le bloc de capture est grisé encore le point d'arrêt. Je ne pense pas que cela puisse être dû au fait que l'exception se produit dans un autre assemblage d'où il est intercepté (j'essaie de l'empaqueter dans une bibliothèque de classes réutilisable, et _member ci-dessus pointe vers une méthode dans l'ensemble de l'application). Si je lance ma petite application de test sans le débogueur, cela fonctionne très bien, mais mon application est un peu plus robuste et a une gestion générale des exceptions qui se déclenche à cause de cela. Je me demande s'il y a juste un attribut ou quelque chose (ou peut-être un paramètre de réflexion qui me manque?) Que je peux utiliser pour que l'exception soit attrapée comme elle est supposée le faire.
Mise à jour: Je suis assez sûr que cela doit être dû à la réflexion et à l'utilisation de MethodInfo.Invoke. Il semble que l'exception soit la première de "TargetInvocationException" avec une exception interne de NullReferenceException. Il semble que l'exception d'invocation se produit d'une façon ou d'une autre en dehors de la pile d'appel et n'est donc pas interceptée à l'intérieur. Je ne fais rien avec les threads, mais peut-être y a-t-il une sorte de "thread-shifting" implicite dans MethodInfo.Invoke?
Est-ce que quelqu'un a des idées sur comment je pourrais forcer cela à être attrapé, ou peut-être une autre façon d'invoquer une méthode à partir d'un nom de méthode qui n'aura pas ce problème? Je suis un peu perplexe.
Est-ce que quelque chose change si vous capturez l'exception (par exemple, 'catch (Exception badness) {...}' au lieu de 'catch {...}' nu? ... –
Non ... exactement pareil – devios1