【问题标题】:Webclient's DownloadStringCompleted event handler never calledWebclient 的 DownloadStringCompleted 事件处理程序从未调用过
【发布时间】:2011-09-10 16:54:07
【问题描述】:

我正在尝试使用 Webclient 发出异步 HTTP GET 请求,但是,注册的回调永远不会被调用。我也尝试过同步的,效果很好。我做错了什么?

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();
}

【问题讨论】:

  • 我猜您是在控制台应用程序中对此进行测试并在下载完成之前退出 Main
  • 嗯。谢谢,这就是问题所在。

标签: c# .net webclient


【解决方案1】:

可能是因为您在完成下载之前处置了WebClient。代码执行不会在 asyncWebRequest.DownloadStringAsync(url); 上停止,您正在通过关闭 using 语句来处理 WebClient 对象。

尝试在asyncWebRequest_DownloadStringCompleted 上处理WebClient

结果

【讨论】:

  • 我已经更新了问题中的代码。它仍然无法正常工作。
  • 嗯,是的,问题是我已经将它作为控制台应用程序进行了测试,并且在调用它之前就退出了。 (请参阅我的问题的第一条评论)。
  • 是的,我看到了。将 Console.ReadLine() 放在 Main 方法的末尾以等待异步调用结束
【解决方案2】:

最简单的解决方案是在AsyncWebRequest(url) 方法的末尾添加Console.ReadKey()。这样asyncWebRequest.DownloadStringAsync(url) 将能够检索数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多