2010-04-12 4 views

Répondre

23
string html = new WebClient().DownloadString("http://twitter.com"); 

Et maintenant, avec async/Hotness attendent en C# 5

string html = await new WebClient().DownloadStringTaskAsync("http://github.com"); 
+0

J'ai l'erreur "; expected" sur cette deuxième ligne. J'utilise VS2012 mais il semble que l'attente ne fonctionne pas. Si j'essaye la chaîne html = attendez wc.DownloadStringTaskAsync ("link"); Je reçois: "Erreur L'opérateur 'await' ne peut être utilisé que dans une méthode asynchrone ..." Dois-je ajouter une référence au projet? – grabah

+1

Je n'ai pas l'intention que cette réponse ressemble à snark, bien que je comprenne que cela puisse se produire de cette façon; mais le message d'erreur indique exactement quelle est la résolution :) la méthode qui contient cette ligne doit être décorée avec le mot-clé "async". –

10

Jetez un oeil à WebClient.DownloadString:

using (WebClient wc = new WebClient()) 
{ 
    string html = wc.DownloadString(address); 
} 

Vous pouvez utiliser WebClient.DownloadStringAsync ou BackgroundWorker pour télécharger le fichier sans bloquer l'interface utilisateur.

+1

Webclient est un IDisposable, alors n'oubliez pas le bloc 'using'. –

+0

joel pouvez-vous expliquer ce commentaire s'il vous plaît –

+0

@every_answer_gets_a_point: Joel Coehoorn fait référence au bloc 'using' qui est présent dans ma réponse, mais pas dans la réponse de Joel Martinez. Puisque WebClient implémente l'interface IDisposable, le bloc 'using' devrait être présent. – dtb

4
var req = WebRequest.Create("http://www.dannythorpe.com"); 
req.BeginGetResponse(r => 
{ 
    var response = req.EndGetResponse(r); 
    var stream = response.GetResponseStream(); 
    var reader = new StreamReader(stream, true); 
    var str = reader.ReadToEnd(); 
    Console.WriteLine(str); 
}, null); 
+0

merci, mais pourquoi ne pensez-vous pas que la réponse de joel est bonne? –

+2

Je n'ai pas d'opinion sur la solution de Joel. Jamais entendu parler de WebClient.DownloadString avant ce post. C'est le code que j'utilise. WebClient.DownloadString semble plus simple à utiliser, mais peut ne pas fournir le même niveau de contrôle (gestion des erreurs, etc.) que les étapes séparées. (Joel et moi avons composé et posté simultanément) – dthorpe

Questions connexes