抛出新的Exception和Application_UnhandledException

时间:2009-03-30 09:31:46

标签: silverlight exception exception-handling

我的情景:

我正在使用Silverlight MVVM模式。我的所有视图模型都继承自BaseViewModel类,该类维护一些基本值和行为。

其中一个行为确定用户是否有权使用特定功能并返回布尔值。

如果找不到该函数,我想抛出一个新的异常并在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 个答案:

答案 0 :(得分:1)

我认为这是因为异常被抛出UI线程之外,因此没有其他代码“等待运行”。在此处触发事件意味着编写更多代码,但允许UI线程订阅此代码并在UI中正确呈现消息。