2

即使NavigationService.CanGoBack返回True,也会NavigationService.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()
  • 如果我在 Internet 不可用时NavigationService.GoBack() 由于WebException抛出HTTPWebRequest我的电话而导致崩溃[1]
  • 如果 Internet 可用并且我在得到结果NavigationService.GoBack()时调用HTTPWebRequest,解析它们并显示它们,则工作正常。

我的理论是,从一个页面导航到另一个页面后我不能GoBack()太快调用......我的问题:当一个页面加载失败时,如何以编程方式返回导航堆栈?HTTPWebRequest

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


[1] 我在案例 2 中的代码详情:

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

        try
        {
            response = request.EndGetResponse(result);
        }
        catch (WebException)
        {
            Dispatcher.BeginInvoke(() =>
            {
                NavigationService.GoBack();
            });
        }

我也试过使用Deployment.Current.Dispatcher.BeginInvoke()

4

1 回答 1

0

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

此外,如果您尝试在事件中做某事OnNavigatedTo并遇到麻烦,您可以尝试使用OnNavigatingFrom代替(在 c 的上一页上),取消导航e.Cancel = true;,按照发出请求和内容的方式执行您的操作,然后获取应用程序框架和导航到e.Uri(基本上继续您之前取消的导航)。

尽管这第二个也可能代表一个解决方案,但我认为第一个更好,因为它异步完成所有工作,因此不会阻塞您的 UI 线程。这是我通常在我的应用程序中使用的。希望能帮助到你。

于 2011-10-21T18:59:56.170 回答