【问题标题】:Where to catch exception in WebClient method?在 WebClient 方法中在哪里捕获异常?
【发布时间】:2012-06-19 09:46:57
【问题描述】:

我正在开发连接到服务并使用一些 JSON 数据的应用程序。消费效果很好(JSON.net 摇滚),但我想知道我应该在哪里捕获异常错误并显示简单的 MessageBox?在几个地方尝试过,但我的应用程序仍然关闭。或者也许我应该根据包含错误标签的 json 响应来做?我认为正常的错误处理可能会更容易,但现在我脑子里有空白..

代码如下:

private void LoginLoginButton_Click(object sender, System.EventArgs e)
        {
            ((ApplicationBarIconButton)ApplicationBar.Buttons[0]).IsEnabled = false;
            ProgressOverlay.Show();
            GenerateLoginString();
            var w = new SharpGIS.GZipWebClient();

            Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
              .Subscribe(r =>
              {

                  var settings = IsolatedStorageSettings.ApplicationSettings;


                  var deserializedRootObject = JsonConvert.DeserializeObject<RootObject>(r.EventArgs.Result);

                  UserSettings us = new UserSettings()
                  {


                          first_name = deserializedRootObject.user.first_name,
                          last_name = deserializedRootObject.user.last_name,
                          user_id = deserializedRootObject.user_id,

                    };
                    settings.Add("UserSettings", us);
                    settings.Save();
              });
            w.DownloadStringAsync(new Uri(UserUri));
            w.DownloadStringCompleted += new DownloadStringCompletedEventHandler(w_DownloadStringCompleted);

        }

        void w_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
                NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        }

【问题讨论】:

    标签: json windows-phone-7 webclient


    【解决方案1】:

    如果您的意思是要捕获发生在 Web 客户端调用中的异常,那么它应该位于 DownloadStringCompletedEventArgsError 属性中。

    void w_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if(e.Error != null)
        {
            MessageBox.Show("An error occurred!");
        }
        else
        {
            NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        }
    }
    

    【讨论】:

    • 我试过这个。但是错误再次出现。并且出现在无法填充 UserSettings 对象的时刻。场景是:如果登录数据没问题,我得到对象调用 UserSettings,如果没有,我只得到一个名为错误的 json 条目:“错误”
    • 所以我想当我知道我会得到什么结果时,我应该尝试捕获异常
    【解决方案2】:

    解决了!

    在这种情况下,我使用了 try 和 catch。完美运行:)

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 2018-04-03
      • 2011-05-12
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多