【问题标题】:WebClient.DownloadStringAsync webexception wp7WebClient.DownloadStringAsync webexception wp7
【发布时间】:2013-06-07 08:13:57
【问题描述】:

我正在尝试从 xml 文件中删除一个节点,一切正常,但有时会发生 xml 网页无法加载的情况。这是我的代码:

private void HttpsCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
            if (e.Error == null)
            {
                XDocument doc = XDocument.Parse(e.Result, LoadOptions.None);

                    var lyric = doc.Descendants(XName.Get("Lyric", "http://api.chartlyrics.com/")).FirstOrDefault();
                    TextBlock1.Text = lyric.Value;


            }

        }
    }

    private void btnLoad_Click(object sender, RoutedEventArgs e)
    {



        WebClient wc = new WebClient();
        wc.DownloadStringCompleted += HttpsCompleted;
        wc.DownloadStringAsync(new Uri("http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect?artist=michael%20jackson&song=bad));


    }

我已经阅读过使用 WebException 来处理这个“错误”,但我无法使用它。有人可以帮帮我吗?

【问题讨论】:

    标签: windows-phone-7 webexception


    【解决方案1】:

    你试过这种方法吗?

        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            try
            {
    
                WebClient wc = new WebClient();
                wc.DownloadStringCompleted += HttpsCompleted;
                wc.DownloadStringAsync(new Uri("http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect?artist=michael%20jackson&song=bad"));
            }
            catch (WebException ex)
            {
                // Check the exception here
            }
        }
    

    还要检查处理程序中的错误:

    private void HttpsCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
            if (e.Error == null)
            {
                XDocument doc = XDocument.Parse(e.Result, LoadOptions.None);
    
                    var lyric = doc.Descendants(XName.Get("Lyric", "http://api.chartlyrics.com/")).FirstOrDefault();
                    TextBlock1.Text = lyric.Value;
            }       
        }
        else
        {
            // Check for error here
        }
    }
    

    我意识到它有时会返回错误,我认为问题出在服务器上,因为如果我从网络浏览器访问它,我有时会得到结果,但很多时候我都会出错。

    【讨论】:

    • 是的,如果 url 不起作用并且没有显示任何内容,它不会捕获异常!谢谢你的耐心:)
    • 我已经完成了答案。在您的代码中,您不检查服务器是否返回错误。我认为问题出在服务器上,因为从 Web 浏览器访问 url 发生了同样的情况。
    • 我知道是服务器错误,如果使用次数过多不加载页面,但我还是不能使用异常,甚至在“else”也无法处理错误: \
    • 你确定吗?我将下一行放在 else 块中,我可以看到错误:MessageBox.Show(e.Error.Message);
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多