2009-03-30 16 views
0

私のシナリオ:私はSilverlightのMVVMパターンを使用していスロー新しい例外とApplication_UnhandledException

。私のすべてのビューモデルは、いくつかの基本的な値と動作を維持するBaseViewModelクラスを継承しています。

これらの動作の1つは、ユーザーが特定の機能を使用する権限を持っているかどうかを判断し、ブール値を返します。

機能が配置されていない場合、私は新しい例外をスローし、App.xaml Application_UnhandledException方法でこれをキャッチし、そして自分自身の例外イベントを発生させる、このような何かしたい:私は

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.")); 
    } 

これは自動的に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)); 
     } 

私の問題

例外がスローされると、スタックにバブリングされません。例外のデバッグが何度も繰り返されると、他のコードは実行されません。

私はここで間違っていますか?

おかげで、 マーク

答えて

1

私は例外がUIスレッドの外に投げているので、これが発生していると思うので、「実行待ち」は他のコードはありません。ここでイベントをトリガーするということは、より多くのコードを書くことを意味しますが、UIスレッドがこれにサブスクライブし、UI内のメッセージを適切にレンダリングできるようにします。

+0

イベントをトリガーにしてください。私はActionを試しましたが、Application_UnhandledExceptionが発生することはありませんでした。 – Aligned

関連する問題