我的情景:
我正在使用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));
}
我的问题
抛出异常时,它不会在堆栈中冒泡。当调试异常被反复命中时,没有其他代码被运行。
我在这里做错了什么?
谢谢, 标记
答案 0 :(得分:1)
我认为这是因为异常被抛出UI线程之外,因此没有其他代码“等待运行”。在此处触发事件意味着编写更多代码,但允许UI线程订阅此代码并在UI中正确呈现消息。