2009-10-18 9 views
1

public string [] SearchForMovie (string SearchParameter) {
WebClientX.DownloadDataCompleted + = new DownloadDataCompletedEventHandler (WebClientX_DownloadDataCompleted); WebClientX.DownloadDataAsync (nouveau Uri ( "http://www.imdb.com/find?s=all&q=ironman+&x=0&y=0"));Problème avec WebClient.DownloadDataAsync(). Ne pas télécharger les données?

string sitesearchSource = Encoding.ASCII.GetString(Buffer); 
} 

void WebClientX_DownloadDataCompleted(object sender, 
    DownloadDataCompletedEventArgs e) 
{ 
    Buffer = e.Result; 
    throw new NotImplementedException(); 
} 

Je reçois cette exception:

La matrice ne peut pas être nulle. En référence à mon tampon de variable byte []. Donc, je peux conclure que DownloadDataAsync ne télécharge pas vraiment quoi que ce soit. Qu'est-ce qui cause ce problème?

PS. Comment puis-je facilement formater mon code afin qu'il apparaisse correctement indenté ici. Pourquoi ne puis-je pas simplement copier le code de Visual C# express et maintenir l'indentation ici? Merci! : D

Répondre

3

Le mot clé ici est "async"; quand vous appelez DownloadDataAsync, il seulement commence le téléchargement; ce n'est pas encore complet. Vous devez traiter les données dans le rappel (WebClientX_DownloadDataCompleted).

public string[] SearchForMovie(string SearchParameter) 
{ 
    WebClientX.DownloadDataCompleted += WebClientX_DownloadDataCompleted; 
    WebClientX.DownloadDataAsync(new Uri(uri)); 
} 

void WebClientX_DownloadDataCompleted(object sender, 
    DownloadDataCompletedEventArgs e) 
{ 
    Buffer = e.Result; 
    string sitesearchSource = Encoding.ASCII.GetString(Buffer); 
} 

Aussi - ne supposez pas ASCII; WebClientX.Encoding serait mieux; ou simplement DownloadStringAsync:

static void Main() 
{ 
    var client = new WebClient(); 
    client.DownloadStringCompleted += DownloadStringCompleted; 
    client.DownloadStringAsync(new Uri("http://google.com")); 
    Console.ReadLine(); 
} 

static void DownloadStringCompleted(object sender, 
    DownloadStringCompletedEventArgs e) 
{ 
    if (e.Error == null && !e.Cancelled) 
    { 
     Console.WriteLine(e.Result); 
    } 
} 
+0

Aha! J'ai compris cela par moi-même (grâce à la déduction) et je me suis rafraîchi et j'ai vu ta réponse. : P Eh bien, cela a changé la conception de mes programmes en termes de portées variables ... AU LABORATOIRE! –