WebClient не работает? - PullRequest
       33

WebClient не работает?

3 голосов
/ 08 июня 2011

У меня есть следующий код:

WebClient client = new WebClient();
client.OpenReadAsync(new Uri("whatever"));
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);

и

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
  Stream reply = (Stream)e.Result;
  StreamReader s;
  s = new StreamReader(reply);
  this._code = s.ReadToEnd();
  s.Close();
}

Во время отладки я вижу, что компилятор не перемещается в событие client_OpenReadCompleted. Где ошибка? Я уже пытался использовать DownloadStringCompleted и DownloadStringAsync вместо этого, но это тоже не работает.

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 08 июня 2011

Ваш порядок операций неправильный.

//create an instance of webclient
WebClient client = new WebClient();
//assign the event handler
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
//call the read method
client.OpenReadAsync(new Uri("whatever"));
1 голос
/ 08 июня 2011

Попробуйте установить обработчик событий перед вызовом асинхронного метода.

WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri("www.google.it"));

РЕДАКТИРОВАТЬ: Я протестировал этот фрагмент внутри LINQPad, и он работает для меня.

void Main()
{
    var client = new System.Net.WebClient();
    client.OpenReadCompleted += (sender, e) =>
    {
        "Read successfully".Dump();
    };
    client.OpenReadAsync(new Uri("http://www.google.it"));
    Console.ReadLine();
}

Вы уверены, что в вашем коде нет исключений?

0 голосов
/ 08 июня 2011

Я бы посоветовал вам не использовать WebClient, поскольку это отрицательно сказывается на вашем пользовательском интерфейсе, поскольку обратный вызов всегда будет возвращаться в потоке пользовательского интерфейса из-за ошибки.

Здесь объясняется, почему и как вы можете это сделатьиспользуйте HttpWebRequest в качестве альтернативы

http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/594e1422-3b69-4cd2-a09b-fb500d5eb1d8

...