调用带有try的方法时不捕获异常?

时间:2012-01-09 14:47:35

标签: c# .net windows-phone-7 try-catch

您好我正在从Web服务中调用一些项目,当他们回来时,我创建了一个专门针对单独方法中返回的项目的界面。现在,每当出现问题时,我都需要捕获异常并向用户显示消息。

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()中引发异常。现在,当这个运行时,我得到了未处理的异常。这是为什么?我想是因为这个方法在try中调用了,最终会在这里得到处理?

2 个答案:

答案 0 :(得分:7)

通过调用BeginInvoke,你说,“在调度程序线程中执行此代码”。 BeginInvoke是异步的,所以整个方法可能会在代码执行之前完成 - 那么它怎么可能进入catch块呢?到那时,调用线程可能会在完全不同的代码段中。

可能如果您使用Invoke代替BeginInvoke可能将异常编组回调用者 - 但我可以从文档中看不到任何证据。

编辑:此外,即使你已经设法捕获异常,你也会在那时从错误的线程访问UI ...

答案 1 :(得分:4)

尝试将try catch放在BeginInvoke中。发生的事情是您在不同的线程上执行此代码,因此不同的线程不会捕获异常。