Silverlight, очевидно, требует, чтобы мы делали большинство вещей «асинхронно», и это добавляет множество странностей для отслеживания ошибок.Я подозреваю, что здесь происходит нечто подобное.Предположительно, вызов XamlReader.Load () запускает операцию, которая выполняется асинхронно (хотя, возможно, в том же потоке, через что-то вроде Dispatcher.BeginInvoke ()), и когда эта операция встречает ошибку, она не перехватываетсяс помощью обычного механизма try / catch, потому что выполнение перешло за предложение catch ().
Например, этот код выдаст необработанную ошибку:
try
{
Deployment.Current.Dispatcher.BeginInvoke(() => throw new Exception("Sucks to be you."));
}
catch(System.Exception ex)
{
ErrorMessageBox.Show(ex.Message);
}
Я бы поставил хорошие деньги на то, что Dispatcher.BeginInvoke () скрывается где-то в глубинах парсера XAML.
Для чего бы то ни было, нечто подобное происходит с BitmapImage.SetSource ().Смотрите этот вопрос здесь: Изящно обрабатывает исключение загрузки изображения