2011-06-08 142 views
3

我有下面的代码:WebClient似乎不工作?

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来代替,但这也不起作用。

感谢您的帮助。

+0

你真的有连接和目标URI是解析?由于没有提出的答案可行,所以假设你的环境本身就是问题是合理的。 – ctacke 2011-06-09 01:48:32

+1

在任何代理服务器后面(通常情况下与公司网络)。如果这样可能会导致模拟器中的问题。 – Shanadas 2011-06-09 05:19:40

回答

0

我会建议你不要使用Web客户端,因为这对你的UI产生负面影响,因为回调总是在UI线程上返回,因为错误的。

这里解释为何以及如何使用HttpWebRequest的作为替代

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

+0

我替换了我的代码,同样的问题。现在调试器不会进入ResponseCallback方法。 =/ – oopbase 2011-06-08 17:53:39

+0

如果您的项目或此处发布的其他解决方案无法正常工作,那么似乎有问题。你是否尝试开始一个新的项目来测试这段代码? – GeertvdC 2011-06-08 18:23:25

+0

为什么你说回到UI线程是一个错误? IIRC,这是通过设计,并在“大”桌面.Net上表现相同 - 就像BackgroundWorker一样。这些组件被设计为易于与GUI交互,这意味着在UI线程上推送结果,因此可以安全地更新UI控件 – quetzalcoatl 2012-09-20 07:38:32

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

你确定你的代码里面没有例外吗?

+0

试过,不幸的是,这也行不通。 – oopbase 2011-06-08 17:33:55

+0

我用LinqPad4测试过它,它适用于我..尝试看看编辑! – 2011-06-08 17:39:45

+0

更改不起作用。我知道,通常它必须工作......所以这个错误必须在别的地方......但我不知道那可能是什么。 – oopbase 2011-06-08 17:45:25

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

我试过了,这也行不通。 – oopbase 2011-06-08 17:35:50