调用try中的方法时未捕获异常

本文关键字:捕获异常 方法 try 调用 | 更新日期: 2023-09-27 18:19:46

嗨,我正在从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内部调用的,那么它最终会在这里处理吗?

调用try中的方法时未捕获异常

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

如果您使用Invoke而不是BeginInvoke,则可能会将异常整理回调用者,但我在文档中看不到任何证据。

EDIT:此外,即使成功捕获了异常,此时您也会从错误的线程访问UI。。。

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