Próbuję wykonać asynchroniczne żądanie HTTP GET przy użyciu klienta WebClient, jednak zarejestrowane wywołanie zwrotne nie jest wywoływane. Próbowałem również z synchronizacją jednego i działało dobrze. Co ja robię źle?
WebClient asyncWebRequest;
public AsyncWebRequest(Uri url)
{
asyncWebRequest = new WebClient();
url = new Uri("http://www.google.com/");
// string test = asyncWebRequest.DownloadString(url); // this works
asyncWebRequest.DownloadStringCompleted += new DownloadStringCompletedEventHandler(asyncWebRequest_DownloadStringCompleted);
asyncWebRequest.DownloadStringAsync(url);
}
void asyncWebRequest_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
throw new NotImplementedException();
}
Odpowiedzi:
2 dla odpowiedzi № 1Może dlatego, że rozporządzasz WebClient
przed zakończeniem pobierania. Wykonanie kodu nie zatrzyma się asyncWebRequest.DownloadStringAsync(url);
i wyrzucasz WebClient
obiekt zamykając instrukcję using.
spróbuj zlikwidować WebClient
na asyncWebRequest_DownloadStringCompleted
.
wyniki
0 dla odpowiedzi nr 2
Najprostszym rozwiązaniem jest dodanie Console.ReadKey()
na końcu AsyncWebRequest(url)
metoda. Tą drogą asyncWebRequest.DownloadStringAsync(url)
będzie w stanie odzyskać dane.