Создайте новое исключение и Application_UnhandledException - PullRequest
0 голосов
/ 30 марта 2009

Мой сценарий:

Я использую шаблон 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));
        }

Моя проблема

Когда выдается исключение, оно не заполняется стеком. При отладке исключения повторяется снова и снова, никакой другой код не запускается.

Что я здесь не так делаю?

Спасибо, Mark

1 Ответ

1 голос
/ 07 апреля 2009

Я думаю, что это происходит, потому что исключение генерируется вне потока пользовательского интерфейса, поэтому нет другого кода, «ожидающего выполнения». Запуск события здесь означает написание гораздо большего количества кода, но позволяет потоку пользовательского интерфейса подписаться на него и правильно отобразить сообщение в пользовательском интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...