WebClient i status pobierania

Mariooiooo
2012-06-27 22:11
Mariooiooo
0

Witam,

W jaki sposób wyświetlać informacje, np. w TextBox o statusie pobierania - czyli ile pobrano z ilu?

WebClient wc = new WebClient();
wc.DownloadFile(zrodlo, @sciezka + plik);

Pozostało 580 znaków

Mariooiooo
2012-06-27 22:56
Mariooiooo
0

Witam ponownie,
Doszedłem do takiego kodu:

wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
   e.ProgressPercentage.ToString();
}

Jednak nie mogę określić do jakiego miejsca ma zwracać procent pobranego pliku. W jaki sposób przekazać dodatkowy parametr w tej metodzie i jak ją w taki sposób zadeklarować? Chodzi mi o zwykłego int'a.

Pozostało 580 znaków

2012-06-27 23:12
Moderator

Rejestracja: 11 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Wrocław

3
Mariooiooo napisał(a):

Jednak nie mogę określić do jakiego miejsca ma zwracać procent pobranego pliku.

Pisząc "miejsce" chodzi Ci o bar mleczny w Łomży?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2012-06-27 23:13

Pozostało 580 znaków

Mariooiooo
2012-06-28 00:02
Mariooiooo
0

Chodzi mi o komponent, np.

ListView.Items[i].Text

I właśnie muszę przekazać ten parametr i.

Pozostało 580 znaków

2012-06-28 01:18
Moderator

Rejestracja: 11 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Wrocław

0

A po co chcesz to zrobić? Moim zdaniem coś źle przemyślałeś, skoro chcesz tak robić. Napisz dokładnie, co chcesz osiągnąć, bo najpierw pisałeś o TextBoxie, teraz o ListView...


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Mariooiooo
2012-06-28 10:59
Mariooiooo
0

W programie będzie kilka wątków, które w tym samym czasie będą pobierać pliki.
I po prostu chcę informować użytkownika o aktualnym statusie pobierania.
Wszystkie informacje czyli nazwa pliku i procent jego pobrania przechowywane są w listview.

Pozostało 580 znaków

2012-06-28 15:15

Rejestracja: 9 lat temu

Ostatnio: 2 lata temu

1

DownloadFileAsync i obsłuż event ProgressChanged

Przecież on próbuje to zrobić. :) - somekind 2012-06-28 20:30
wcześniej użył DownloadFile a nie DownloadFileAsync ;) - Markness 2012-06-28 20:53

Pozostało 580 znaków

2012-06-28 20:45
Moderator

Rejestracja: 11 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Wrocław

0

Zamiast pisać strukturalnie i przekazywać magiczne indeksy z funkcji do funkcji, zrobiłbym klasę, która zawierałaby w sobie ListViewItem oraz WebClient wraz z obsługą jego zdarzeń. Np. tak:

class DownloadItem : IDisposable
{
    private const string DownloadDirectoryPath = @"D:\Porno";

    private string url, fileName;
    private WebClient webClient;

    public ListViewItem ListViewItem { get; private set; }

    public DownloadItem(string url)
    {
        this.url = url;
        this.webClient = new WebClient();
        this.webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(WebClient_DownloadProgressChanged);
        this.webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(WebClient_DownloadFileCompleted);

        this.fileName = Path.GetFileName(url);
        this.ListViewItem = new ListViewItem(fileName);
    }

    public void Start()
    {
        this.webClient.DownloadFileAsync(new Uri(this.url), Path.Combine(DownloadDirectoryPath, fileName));
    }

    void WebClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        this.ListViewItem.Text = string.Format("{0} | {1}%", this.fileName, e.ProgressPercentage);
    }

    void WebClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        this.ListViewItem.Remove();
    }

    public void Dispose()
    {
        this.webClient.Dispose();
    }
}

Można jej potem łatwo użyć, np tak.:

private void btnStart_Click(object sender, EventArgs e)
{
    this.DownloadItems.Add(new DownloadItem(@"http://storage.dobreprogramy.pl/akcesoria/7z920-x64(dobreprogramy.pl).msi"));
    this.DownloadItems.Add(new DownloadItem(@"http://downloads.sourceforge.net/project/openofficeorg.mirror/stable/3.4.0/Apache_OpenOffice_incubating_3.4.0_Win_x86_install_en-US.exe"));
    this.DownloadItems.Add(new DownloadItem(@"http://download.documentfoundation.org/libreoffice/stable/3.5.4/win/x86/LibO_3.5.4_Win_x86_install_multi.msi"));
    this.DownloadItems.ForEach(q => this.lvDownloads.Items.Add(q.ListViewItem));

    this.DownloadItems.ForEach(q => q.Start());
}

(DownloadItems to oczywiście lista.)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 2x, ostatnio: somekind, 2012-06-28 20:47

Pozostało 580 znaków

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