WebClient似乎无法工作?

3

我有以下代码:

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事件。错误出在哪里?我已经尝试使用DownloadStringCompletedDownloadStringAsync,但这也不起作用。

感谢您的帮助。


你是否确实具有连接性并且目标URI是可解析的?由于提出的答案都不起作用,可以合理地假设您的环境本身是问题所在。 - ctacke
1
你是否在任何代理服务器后面(这通常是企业网络的情况)?如果是这样,可能会导致模拟器出现问题。 - Shanadas
3个回答

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

你确定你的代码里没有异常吗?

我已经用LinqPad4进行了测试,对我来说是可行的。试着看一下编辑! - as-cii
更改没有效果。我知道,通常它应该起作用...所以错误必须在其他地方...但我不知道那可能是哪里。 - oopbase
我认为你的问题可能是由于WP7的特定行为引起的,你是否尝试过遵循http://stackoverflow.com/users/347112/vdcruijsen-net的建议? - as-cii
是的,我做到了。同样的问题 =/ - oopbase

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"));

0

我替换了我的代码,但问题依旧。现在调试器无法进入ResponseCallback方法。=/ - oopbase
如果这里提供的解决方案都无法解决问题,那么你的项目或其他方面可能存在问题。你尝试过创建一个新的项目来测试这段代码吗? - GeertvdC
为什么你说返回到UI线程是一个bug?如果我没记错的话,这是按设计来的,在“大型”桌面.Net上它的行为也是一样的 - 就像BackgroundWorker一样。这些组件被设计成可以轻松地与GUI交互,这意味着将结果推送到UI线程,以便可以安全地更新UI控件。 - quetzalcoatl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接