我有以下代码:
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
,但这也不起作用。
感谢您的帮助。
答案 0 :(得分:1)
尝试在调用异步方法之前放置事件处理程序。
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();
}
您确定代码中没有异常吗?
答案 1 :(得分:1)
您的操作顺序不正确。
//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"));
答案 2 :(得分:0)
我建议您不要使用WebClient,因为这会对您的UI产生负面影响,因为由于错误,回调将始终在UI线程上返回。
这里解释了为什么以及如何使用HttpWebRequest作为替代