2010-08-16 46 views

回答

1

而不是呼叫WebClient.DownloadStringAsync(Uri),調用過載,DownloadString(Uri, Object),傳遞Uri作爲第二個參數。然後,在事件處理程序中,您可以將值e.UserToken轉換爲Uri以檢索該值。即:

Uri uri = new Uri("http://example.com"); 
WebClient client = new WebClient(); 
client.DownloadStringCompleted = StringDownloaded; 
client.DownloadStringAsync(uri, uri); 


void StringDownloaded(object sender, DownloadStringCompletedEventArgs e) 
{ 
    Uri uri = (Uri)e.UserToken; 

    ... 
} 

您可以使用此技術將任何類型的狀態傳遞給事件處理函數。

+0

對不起,回覆遲了,感謝您的建議,將UserState屬性強制轉換爲Uri並重載DownloadStringAsync完美工作(看不到UserToken) 乾杯 – Ash 2010-08-18 16:20:31

1
(e.Error.Response as HttpWebResponse).ResponseUri 
+0

但如果有重定向不會ResponseUri從請求的URI有所不同呢? – 2010-08-16 20:49:18

1

Ash對Jim Mischel的回答所說的是,在事件處理函數中傳遞給DownloadStringAsync的UserToken可以在e.UserState中訪問(e.UserToken在DownloadStringCompletedEventArgs對象e上不存在)。

即這個工程:

Uri uri = new Uri("http://example.com"); 
WebClient client = new WebClient(); 
client.DownloadStringCompleted = StringDownloaded; 
client.DownloadStringAsync(uri, uri); 


void StringDownloaded(object sender, DownloadStringCompletedEventArgs e){ 
    Uri uri = (Uri)e.UserState; 
    ... 
}