2010-08-16 2 views
1

Ну, в основном я хочу записать uri, который вызывает ошибку при тестировании, используя отладчик, я могу найти uri, который потерпел неудачу, однако я не знаю, как его получить, вот экран печати нижеПолучение ошибки Uri от DownloadStringCompletedEventArgs

http://img802.imageshack.us/img802/5465/progps.jpg

Совет оценил.

ответ

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) Cheers – Ash

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

Но не ResponseUri отличаться от запрашиваемой Ури, если есть переадресовывает? –

1

Какое замечание от Ash по поводу ответа Джима Мишеля говорит о том, что UserToken, переданный DownloadStringAsync в функции обработчика событий, доступен в 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; 
    ... 
} 
Смежные вопросы