[C#]DownloadFileAsync - 1 na raz

0

Poniższy kod mam puszczony w forze - 14 razy. Problem jest taki, że pobiera 2 pliki na raz, resztę wrzuca do kolejki.
Przez to, że pobiera 2 na raz, progressbar mi szaleje między tymi 2 plikami. Da się jakoś ograniczyć być pobierał 1 na raz?

            try
            {
                WebClient wc = new WebClient();
                string url = webpath;
                wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
                wc.DownloadFileAsync(new Uri(url), path);
            }
            catch
            {
                MessageBox.Show("Błąd przy pobieraniu: \n" + pbo, "Komunikat!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
0

Ponieważ każdy plik ściągasz osobnym WebClientem, możesz je rozróżniać po parametrze sender wewnątrz zdarzeń.

0

W jaki sposób z tego skorzystać? Jeżeli chodzi o asynchroniczne i wielowątkowe funkcje to raczej słabo mi idzie.
Chce jedynie coś zrobić, żeby pobierało 1 na raz, nie 2. Gdybyś był łaskaw wstawić część kodu która by to umożliwiła, to bym był wdzięczny. Po kolei bym go sobie prześledził.

0

Jeśli chcesz żeby było synchronicznie, to nie używaj asynchronicznych funkcji...

Używając DownloadFileAsync ogłaszasz, że nie interesuje cię (i nie masz wpływu) ile plików idzie na raz.

1

Witaj,
Nie wiem czy dalej cie to interesuje, ale wydaje mi się że chodzi ci o to żeby pobrać jeden plik a po jego zakończeniu pobrać kolejny wiec nie powinieneś ładować tego kodu do for-a bo wykona się 14 razy i uruchomi 14 wątków z którego każdy będzie chciał dostać się do serwera i pobrać jeden plik. Wiec to co musisz zrobić to uruchomić twój kod raz a następnie poczekać na wystąpienie event-u DownloadFileComplited i tam ponownie uruchomić DownloadFileAsync i tak w kółko aż pobierzesz wszystkie pliki.

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