Webclient.DownloadString崩溃

时间:2010-09-30 08:23:50

标签: c# download crash

我有一个名为GetIP的函数,我在启动时和用户按下按钮时调用它。 由于某种原因,它在启动时不会崩溃,但是在使用按钮调用函数时会发生崩溃。没有任何事情只会冻结。

功能代码:

        private void GetIP()
        {
        string pageTitle = functions.GetWebPageTitle("http://xyro18.woelmuis.nl/index.php");
        string[] ip = new string[2];
        ip = pageTitle.Split('|');
        currentIpLabel.Text = ip[0];
        webIpLabel.Text = ip[1];
        }

现在我发现它在我的getWebPageTitle函数中崩溃了

功能代码:

public static string GetWebPageTitle(string url)
    {
        // Create a request to the url
        HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Method = "HEAD";
        // If the request wasn't an HTTP request (like a file), ignore it
        if (request == null) return null;

        // Use the user's credentials
        request.UseDefaultCredentials = true;

        // Obtain a response from the server, if there was an error, return nothing
        HttpWebResponse response = null;
        try { response = request.GetResponse() as HttpWebResponse; }
        catch (WebException) { return null; }

        // Regular expression for an HTML title
        string regex = @"(?<=<title.*>)([\s\S]*)(?=</title>)";

        // If the correct HTML header exists for HTML text, continue
        if (new List<string>(response.Headers.AllKeys).Contains("Content-Type"))
            if (response.Headers["Content-Type"].StartsWith("text/html"))
            {
                // Download the page
                WebClient web = new WebClient();
                web.UseDefaultCredentials = true;
                string page = web.DownloadString(url);

                // Extract the title
                Regex ex = new Regex(regex, RegexOptions.IgnoreCase);
                return ex.Match(page).Value.Trim();
            }

        // Not a valid HTML page
        return null;
    }

它在网络上崩溃.DownloadString

崩溃我的意思是冻结并且不显示任何exeptions等。

1 个答案:

答案 0 :(得分:0)

嗯,我不能说我知道为什么会冻结,但这里有一些建议可能会有所帮助:

  • 完成后调用response.Close()(例如,当您从方法返回时)。
  • WebClient类实现了IDisposable,因此您应该尝试使用using构造。
  • 不是每次为单个匹配创建新的Regex对象,而是使用Regex类中的静态方法。
  • 尝试将web.Proxy属性设置为null,以确保它不会尝试检测代理(默认情况下)。