2009-03-30 10 views
0

Mon scénario:throw new Exception et Application_UnhandledException

J'utilise un modèle Silverlight MVVM. Tous mes modèles de vue héritent d'une classe BaseViewModel qui conserve certaines valeurs et comportements de base.

L'un de ces comportements détermine si l'utilisateur est autorisé à utiliser une fonctionnalité particulière et renvoie un booléen.

Si la fonction ne se trouve pas, je veux lancer une nouvelle exception et attraper ce dans le App.xaml Application_UnhandledException méthode et élever mon propre événement d'exception, quelque chose comme ceci:

protected bool IsFunctionEnabled(string FunctionName) 
     { 
      //fetch the function/role 
      if (_FunctionRoles().ContainsValue(FunctionName)) 
      { 
       KeyValuePair<int, string> kvp = _FunctionRoles().GetEntryByStringValue(FunctionName); 

       //determine if the user has been assigned to this role 
       return (_UserRoles().ContainsKey(kvp.Key)); 
      } 
     //throw an exception when the function name is not located. 
     throw new Exception(string.Format(Constants.UNHANDLED_EXCEPTION, "security role assignment: '" + FunctionName + "' not located.")); 
    } 

I voulez-vous alors ce repris automatiquement dans app.xaml:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
     { 
      // throw this message to the main application exception event handler 
      ApplicationEvents.OnExceptionOccurred(this, 
       new ExceptionEventArgs(e.ExceptionObject, 
        null, 
        ExceptionImportance.Critical)); 
     } 

Mon problème

Lorsque l'exception est levée, elle ne se propage pas dans la pile. Lorsque le débogage de l'exception est frappé encore et encore, aucun autre code ne s'exécute.

Qu'est-ce que je fais mal ici?

Merci, Mark

Répondre

1

Je pense que cela se produit parce que l'exception s'en dehors du jeté thread d'interface utilisateur, donc il n'y a aucun autre code « en attente d'exécution ». Déclencher un événement ici signifie écrire beaucoup plus de code, mais permet au thread de l'interface utilisateur de s'y abonner et de rendre un message dans l'interface utilisateur correctement.

+0

pourriez-vous s'il vous plaît développer sur le déclenchement d'un événement. J'ai essayé avec Action, mais je n'ai pas obtenu l'exception Application_UnhandledException. – Aligned