2011-06-08 144 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