2011-01-20 7 views
7

Używam metody DownloadFileAsync (w języku C#) WebClient do asynchronicznego pobierania plików. Mam programy obsługi zdarzeń dołączone do zdarzeń DownloadProgressChanged i DownloadFileCompleted. Mam nadzieję, że otrzymam powiadomienie o wszelkich błędach za pośrednictwem właściwości Error AsyncCompletedEventArgs w procedurze obsługi zdarzenia DownloadFileCompleted. Działa dobrze, jeśli połączenie nie jest obecne przed rozpoczęciem pobierania. Fałszuje się z odpowiednim błędem i pojawia się błąd we właściwości, o której wspomniałem powyżej. Ale jeśli połączenie zostanie przerwane podczas pobierania, nic się nie dzieje. Program obsługi zdarzeń nie jest wywoływany, zawsze czeka na nie. Co powinienem zrobić, aby obsłużyć taki scenariusz? Dzięki.wykrywanie spadków połączenia, podczas gdy WebClient pobiera plik asynchronicznie (w języku C#)

+0

Czy można utworzyć rejestr śledzenia system.net tego? Zobacz http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html, jak to zrobić. I opublikuj dziennik na stronie pastebin.com i umieść link do logu tutaj. Możemy rzucić okiem. Na pierwszy rzut oka brzmi to jak błąd, ale plik logu pomoże w debugowaniu. – feroze

Odpowiedz

6

Najlepszym sposobem na zrobienie tego, o co prosisz, jest prawdopodobnie wprowadzenie limitu czasu połączenia.

Zasadniczo utwórz zegar, który zostanie zresetowany za każdym razem, gdy zostanie wywołane zdarzenie DownloadProgressChanged. W ten sposób, jeśli nie otrzymasz żadnych aktualizacji postępu w ramach limitu czasu, możesz zadzwonić do polecenia CancelAsync w WebClient, aby nie czekać na zawsze.

To jedyny sposób, w jaki udało mi się to zrobić.

Powiązane problemy