Edw*_*ard 2 .net c# try-catch windows-phone-7
嗨我正在从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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我故意在方法CreateInterface()中抛出一个异常.现在,当这个运行时,我得到了未处理的异常.这是为什么?我认为既然这个方法在try中调用了,它最终会在这里得到处理?
通过调用BeginInvoke你说,"在调度程序线程中执行此代码".BeginInvoke是异步的,所以整个方法可能会在代码执行之前完成 - 那么它怎么可能进入catch块呢?到那时,调用线程可能会在完全不同的代码段中.
这是可能的,如果你使用Invoke的,而不是BeginInvoke你可能会得到整理返回给调用者除外-但它是我不能看到从文档的任何证据.
编辑:另外,即使你已经成功地捕获异常,你会在这一点上访问从错误的线程UI ...