C# 网络客户端不';好像不行?

C# 网络客户端不';好像不行?,c#,windows-phone-7,webclient,C#,Windows Phone 7,Webclient,我有以下代码: WebClient client = new WebClient(); client.OpenReadAsync(new Uri("whatever")); client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 以及: 在调试过程中,我可以看到编译器没有进入client\u OpenReadCompleted事件。哪里错了?我已经尝试使用DownloadS

我有以下代码:

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

在调试过程中,我可以看到编译器没有进入
client\u OpenReadCompleted
事件。哪里错了?我已经尝试使用
DownloadStringCompleted
DownloadStringAsync
来代替,但这也不起作用


感谢您的帮助。

在调用异步方法之前,请尝试放置事件处理程序

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

您确定代码中没有异常吗?

您的操作顺序不正确

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

我建议您不要使用WebClient,因为这会对您的UI产生负面影响,因为由于存在错误,回调总是会在UI线程上返回

下面解释了为什么以及如何使用HttpWebRequest作为替代方案


我已经用LinqPad4对它进行了测试,它对我很有效。。尝试查看编辑!这一变化没有效果。我知道,通常它必须工作。。。所以这个错误一定是在别的地方。。。但我不知道这可能是什么地方。我认为您的问题可能是由于特定的WP7行为,您是否尝试过遵循建议?是的,我尝试过。同样的问题=/I替换了我的代码,同样的问题。现在调试器不会进入ResponseCallback方法=/如果此解决方案和此处发布的其他解决方案不起作用,那么您的项目或任何东西似乎有问题。您是否尝试启动一个新的项目来测试这段代码?为什么说返回UI线程是一个bug?IIRC,这是设计的,在“大”桌面.Net上,它的行为是相同的-就像BackgroundWorker一样。这些组件被设计成可以轻松地与GUI交互,这意味着将结果推送到UI线程上,这样UI控件就可以安全地更新。您是否确实具有连接性并且目标URI是可解析的?由于提出的答案都不起作用,因此可以合理地假设您的环境本身就是任何代理服务器背后的问题。如果是这样,这可能会导致emulator中出现问题。
//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"));