none
webclient.CancelAsync(); bei allen vorhanden Webclients anwenden RRS feed

  • Frage

  • Hallo,

    ich hab mit meiner Download-Anwendung ein letztes kleines Problem. Und zwar möchte ich, dass der Benutzer meiner Anwendung bestimmte Downloads abbrechen kann. Das sollte mit webclient.CancelAsync(); ja kein Problem sein - bei mir hingegen schon.

    Ich erstelle nämlich mit folgendem Code mehrere gleichnamige Webclients:

                        for (z = 0; z < CheckedCount; z++)
                        {
                            _MultipleWebClients = new WebClient();
    
                            _MultipleWebClients.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompleted);
                            _MultipleWebClients.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
                            _MultipleWebClients.DownloadFileAsync(new Uri(_downloadUrlList[z].ToString()), tbSavePathArchiv.Text + _downloadRowNameList[z] + ".mp4", dgvDownloads.Rows[z]);
                            start = DateTime.Now;
                        }

    Wenn ich nun

    _MultipleWebClients.CancelAsync();

    per Button ausführen will, wird (natürlich) nur der zuletzt erstellte Webclient abgebrochen, die Restlichen laufen hingegen weiter.

    Deswegen wollte ich mal nachfragen ob es eine Möglichkeit gibt, das CancelAsync(); auch bei den restlichen Webclients anzuwenden.

    Grüße,

    Fabzen

    Sonntag, 1. Juli 2012 15:22

Antworten

  • Hi,

    was soll da auch anderes bei rauskommen? Du überschreibst die Variable _MultipleWebClients ja auch immer wieder.

    Ich würde es mal mit einer List<WebClient> versuchen. Innerhalb der Schleife deklarierst Du eine neue Variable:

    List<WebClient> MultipleWebClients = new List<WebClient>;
    
    ...
    
    for (z = 0; z < CheckedCount; z++)
    {
        WebClient wc = new WebClient();
    
        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompleted);
        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
        wc.DownloadFileAsync(new Uri(_downloadUrlList[z].ToString()), tbSavePathArchiv.Text + _downloadRowNameList[z] + ".mp4", dgvDownloads.Rows[z]);
    
        this.MultipleWebClients.Add( wc );
    
        start = DateTime.Now;
    }

    Den Code hab ich jetzt nur schnell hingeschrieben, es mag also noch ein Fehler enthalten sein. den grundsätzlichen Weg solltest Du aber sehen können.

    Ggfs. wäre, je nach Anforderung auch eine eigene Klasse und eine List<EigeneKlasse> sinnvoll. Die eigene Klasse könnte dann als Property die WebClient Instanz aufnehmen, dazu dann bspw. StartTime, ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Fabzen Dienstag, 3. Juli 2012 01:20
    Sonntag, 1. Juli 2012 15:33
    Moderator