Pobieranie pliku asychronicznie+dodatkowe działania po pobraniu

0

Zmagam się z następującym problemem.
Mam do pobrania kilka spakowanych plików, które następnie, plik po pliku chciałbym pobrać, rozpakować i wysłać do przetworzenia przez inny program.
Budowa programu wygląda mniej więcej tak:
Metoda główna:
-Pobierz pierwszy plik
-Pobierz drugi plik
-pobierz trzeci plik

Metoda pobierająca:

  • pobieraj asynchro.
  • uzupełniaj info o postępie
  • poinformuj o zakończeniu pobierania.

Początkowo myślałem, że dodatkowe działania po pobraniu pliku (rozpakuj, uruchom przetwarzanie w innym programie) wpiszę w zdarzenie o zakończeniu pobierania i byłoby to dobre, ale problemem jest to, iż po pobraniu pliku pierwszego od razu zaczyna pobierać się plik drugi, bez czekania na wykonanie zadań dodatkowych.
Przypuszczam, że muszę zastosować tu operacje na wątkach. Czy znajdzie się dobrodziej, który pomoże mi to zaprogramować?
Dzięki.

0

No ale z czym konkretnie masz problem? Skoro pobierasz plik asynchronicznie to masz tam pewnie jakieś zdarzenie informujące o zakończeniu pobierania pliku, możesz tam uruchomić metodę rozpakowującą itd.

0

Masz już jakiś kod? Jeżeli tak to pokaż. Jeżeli wykonujesz metody asynchronicznie to raczej nie potrzeba Ci tworzyć dodatkowych wątków. Możesz zrobić tak jak jest tu opisane: http://www.codeproject.com/Tips/360447/Asynchronous-methods-using-Csharp-Part-I Gdy zakończysz pobierać po prostu rozpakowujesz i przekazujesz dalej, a w wątku głównym pobierasz kolejny.

0

Korzystam z kodu do pobierania asynchronicznego ze strony: http://www.fluxbytes.com/csharp/how-to-download-a-file-in-c-progressbar-and-download-speed/

Jeżeli pod Buttonem mam zadeklarowane np.
DownloadFile("http:\plik1.zip", "C:")
DownloadFile("http:\plik2.zip", "C:")
DownloadFile("http:\plik3.zip", "C:")
,to niestety w jednym czasie pobierają się te trzy pliki (oczywiście progressbar szaleje itd.)

Przypuszczam, że źle wywołuje pobieranie tych plików. Chciałbym to zrobić jeden po drugim, a do tego zapewne należałoby użyć zdarzenia Complete.
Kompletnie nie wiem od czego zacząć. Każda sugestia to już mały sukces.

0

Bo uruchamiarz 4 metody pod rząd, z kolei każda z nich pobiera asynchronicznie plik to się nie dziw, że progressbar wariuje. Musisz przerobić kod tak, aby następne pobieranie uruchomiło się po ukończeniu poprzedniego. Do tego możesz użyć semafora albo AutoResetEvent. Ewentualnie najprościej dodać zmienną bool oznaczająca czy coś aktualnie się pobiera i sprawdzać ją czy już można pobrać następny czy nie.

1
xeo545x39 napisał(a):

Bo uruchamiarz 4 metody pod rząd, z kolei każda z nich pobiera asynchronicznie plik to się nie dziw, że progressbar wariuje. Musisz przerobić kod tak, aby następne pobieranie uruchomiło się po ukończeniu poprzedniego. Do tego możesz użyć semafora albo AutoResetEvent. Ewentualnie najprościej dodać zmienną bool oznaczająca czy coś aktualnie się pobiera i sprawdzać ją czy już można pobrać następny czy nie.

Nie lepiej mieć kolejkę plików do pobrania watek bierze po kolei każdy plik ściąga jak ściągnie wszystko to wątek zostaje zastopowany w momencie dodania kolejnego znowu się odpala.

0

Po wielu próbach ostatecznie udało mi się z gotowym rozwiązaniem: http://stackoverflow.com/questions/6992553/how-do-i-async-download-multiple-files-using-webclient-but-one-at-a-time

Czy to musi być, aż tak skomplikowane?

1 użytkowników online, w tym zalogowanych: 0, gości: 1