Не перехватить исключение при вызове метода без попытки? - PullRequest
2 голосов
/ 09 января 2012

Привет, я вызываю некоторые элементы из веб-службы, и когда они возвращаются, я создаю интерфейс, адаптированный к элементам, возвращаемым внутри отдельного метода. Теперь каждый раз, когда что-то идет не так, и мне нужно перехватить исключение и показать сообщение пользователю.

private void itemHelper_FeaturedItemsCalled(object sender, List<MyItem> _myItemList)
{
    try
    {
        Dispatcher.BeginInvoke(() =>
        {
            if(_myItemList != 0)
                CreateInterface(_myItemList);
        });
    }
    catch
    {
        Dispatcher.BeginInvoke(() =>
        {
            LoadingScreen.Visibility = System.Windows.Visibility.Visible;
            LoadingTextBlock.Text = "Unable to display items.";
            BusyIndicator1.IsRunning = false;
        }
    }
}

Теперь я специально сгенерировал исключение внутри метода CreateInterface () . Теперь, когда это работает, я получаю и необработанное исключение. Это почему? Я думал, так как метод был вызван из попытки, он в конечном итоге будет обработан здесь?

Ответы [ 2 ]

7 голосов
/ 09 января 2012

Вызывая BeginInvoke, вы говорите: «Выполните этот код в потоке диспетчера». BeginInvoke является асинхронным, поэтому весь метод, вероятно, завершится до того, как код будет выполнен - ​​так как же он может попасть в блок catch? К тому времени вызывающий поток, вероятно, будет находиться в совершенно другом разделе кода.

Возможно возможно , что если вы используете Invoke вместо BeginInvoke, вы могли бы получить исключение, направленное обратно вызывающей стороне - но я не вижу никаких доказательств того, что что из документации.

РЕДАКТИРОВАТЬ: Кроме того, даже если вы имели удалось перехватить исключение, в этот момент вы получите доступ к пользовательскому интерфейсу из неправильного потока ...

4 голосов
/ 09 января 2012

Попробуй поместить try try в BeginInvoke.Происходит то, что вы выполняете этот код в другом потоке, поэтому исключение не перехватывается другим потоком.

...