2010-09-30 9 views
1

J'ai une fonction appelée GetIP que j'appelle au démarrage et lorsque l'utilisateur appuie sur un bouton. pour une raison quelconque, il ne plante pas au démarrage, mais c'est le cas lorsque vous appelez la fonction avec un bouton. Aucune exeptions rien il gèle juste.Webclient.DownloadCas crash

Code

pour la fonction:

 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]; 
     } 

Maintenant, je trouve que ça plante dans ma fonction getWebPageTitle

Code

pour la fonction:

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; 
    } 

Il se bloque sur le web.DownloadString

avec accident je veux dire geler et n'affiche aucune exeptions, etc.

Répondre

0

Eh bien, je ne peux pas dire que je sais pourquoi il gèle, mais voici quelques suggestions qui pourraient vous aider:

  • Appel response.Close() lorsque vous avez terminé avec elle (par exemple quand vous revenez de la méthode).
  • La classe WebClient implémente IDisposable, vous devriez donc essayer la construction using.
  • Au lieu de créer un nouvel objet Regex chaque fois pour une seule correspondance, utilisez les méthodes statiques de la classe Regex.
  • Essayez de définir la propriété web.Proxy sur null, pour vous assurer qu'elle n'essaie pas de détecter un proxy (comme ce serait le cas par défaut).
+0

Merci, cela a fonctionné, mis en œuvre toutes les options, il semblait que je ne ferme pas le signal de réponse. – Xyro