太快使用NavigationService.GoBack()时Windows Phone App崩溃了

时间:2011-10-07 04:33:24

标签: windows-phone-7 httpwebrequest dispatcher navigationservice

即使NavigationService.CanGoBack返回TrueNavigationService.GoBack()也会抛出这些例外:

A first chance exception of type 'System.ArgumentException' occurred in System.Windows.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in 

这种情况在两种情况下系统地发生,而第三种情况正常:

  • 如果我在NavigationService.GoBack()
  • 中致电OnNavigatedTo() ,则会崩溃
  • 崩溃如果因互联网不可用时NavigationService.GoBack() WebException引发HTTPWebRequest 而致电[1]
  • 如果互联网可用,则可以正常工作,当NavigationService.GoBack()获得结果,解析并显示结果时,我会调用HTTPWebRequest

我的理论是,在从一个页面导航到另一个页面后,我无法过早地调用GoBack() ...我的问题:如果{{1>我以编程方式返回导航堆栈无法加载?

编辑:我决定以另一种方式做,但我认为我的问题可能是由于导航动画和Windows Phone C#Toolkit(我使用2011年2月版)


[1]关于案例2的代码详情:

我有一个简单的HTTPWebRequest。我的回调就是这样做的,我的应用程序在飞行模式下崩溃了。 HTTPWebRequest行负责,即使NavigationService.GoBack()返回NavigationService.CanGoBack

true

我也尝试使用 try { response = request.EndGetResponse(result); } catch (WebException) { Dispatcher.BeginInvoke(() => { NavigationService.GoBack(); }); }

1 个答案:

答案 0 :(得分:0)

您可以尝试使用WebClient client = new WebClient();,然后使用client.DownloadStringAsync(new Uri("request_url"));发出请求并订阅client.DownloadStringCompleted事件,以便在请求完成时接收您的数据。解析数据后,在事件处理程序中,您可以调用NavigationService.GoBack();或转到您想要的任何页面。

此外,如果您尝试在OnNavigatedTo事件中执行某些操作并遇到问题,可以尝试使用OnNavigatingFrom代替(在上一页的ofc上),取消导航e.Cancel = true;做你的请求和东西,然后获取应用程序框架并导航到e.Uri(基本上继续您之前取消的导航)。

虽然这第二个也可能代表一个解决方案,但我认为第一个更好,因为它所有的工作都是async,因此不会阻止你的UI线程。这是我在我的应用程序中通常使用的内容。希望它有所帮助。