Programim dhe zhvillim, javascript, python, php, html

Si të anuloni shkarkimin e Asinkronizimit?

Unë kam një problem. Si mund të anuloj një shkarkim?

 client.CancelAsync();

Nuk funksionon për mua, sepse nëse anuloj një shkarkim dhe nis një të ri, kodi ende përpiqet të hyjë në skedarin e vjetër të shkarkimit. Duhet të dini se në kodin tim është një pjesë kur të kryhet shkarkimi, ai duhet të çzip skedarin që është shkarkuar. Example.zip si ky :) Pra, kur anuloj shkarkimin tim dhe filloj një të re, ju e dini që skripti im përpiqet të ç'zipojë Example.zip-in tim të vjetër, por duhet të fillojë këtë ....

Për Unzipping, po përdor Iconic.Zip.dll (http://dotnetzip.codeplex.com/ )

Si të funksionojë?


PËRDITËSIM:

Ky është formulari im i shkarkimit

     private void button3_Click_1(object sender, EventArgs e)
    {

        DialogResult dialogResult = MessageBox.Show("This will cancel your current download ! Continue ?", "Warning !", MessageBoxButtons.YesNo);
        if (dialogResult == DialogResult.Yes)
        {

            cancelDownload = true;
            URageMainWindow.isDownloading = false;
            this.Close();

        }
        else if (dialogResult == DialogResult.No)
        {

        } 
    }

Kjo është forma ime kryesore kjo ndodh kur filloni të shkarkoni diçka

 private void checkInstall(object sender, WebBrowserDocumentCompletedEventArgs e)
    {

            string input = storeBrowser.Url.ToString();

            // Test these endings
            string[] arr = new string[]
           {"_install.html"};

            // Loop through and test each string
            foreach (string s in arr)
            {
                if (input.EndsWith(s) && isDownloading == false)
                {


                   // MessageBox.Show("U.Rage is downloading your game");
                    Assembly asm = Assembly.GetCallingAssembly();
                    installID = storeBrowser.Document.GetElementById("installid").GetAttribute("value");
                   // MessageBox.Show("Name: " + installname + " ID " + installID);
                    installname = storeBrowser.Document.GetElementById("name").GetAttribute("value");
                    installurl = storeBrowser.Document.GetElementById("link").GetAttribute("value");

                    isDownloading = true;
                    string install_ID = installID;
                    string Install_Name = installname;

                    // MessageBox.Show("New Update available ! " + " - Latest version: " + updateversion + "  - Your version: " + gameVersion);
                    string url = installurl;
                    WebClient client = new WebClient();
                    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_InstallProgressChanged);
                    client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_InstallFileCompleted);
                    client.DownloadFileAsync(new Uri(url), @"C:\U.Rage\Downloads\" + installID + "Install.zip");
                    if (Downloader.cancelDownload == true)
                    {
                        //MessageBox.Show("Downloader has been cancelled");
                        client.CancelAsync();
                        Downloader.cancelDownload = false;
                    }
                    notifyIcon1.Visible = true;
                    notifyIcon1.ShowBalloonTip(2, "Downloading !", "U.Rage is downloading " + installname, ToolTipIcon.Info);
                    System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:/U.Rage/Sounds/notify.wav");
                    player.Play();

                    storeBrowser.GoBack();
                    igm = new Downloader();
                    igm.labelDWGame.Text = installname;
                    // this.Hide();
                    igm.Show();
                    return;
                }

                  if (input.EndsWith(s) && isDownloading == true)
                {
                  System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:/U.Rage/Sounds/notify.wav");
                  player.Play();
                  MessageBox.Show("Please wait until your download has been finished", "Warning");
                  storeBrowser.GoBack();
                }
            }
        }

Kjo ndodh kur shkarkimi ka përfunduar

     void client_InstallFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        if(Downloader.cancelDownload == false)
        {
            using (ZipFile zip = ZipFile.Read(@"C:\U.Rage\Downloads\" + installID + "Install.zip"))
            {
                //zip.Password = "iliketrains123";
                zip.ExtractAll("C:/U.Rage/Games/", ExtractExistingFileAction.OverwriteSilently);
            }
            System.IO.File.Delete(@"C:/U.Rage/Downloads/" + installID + "Install.zip");
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(2, "Download Completed !", "Installing was succesful !", ToolTipIcon.Info);
            System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:/U.Rage/Sounds/notify.wav");
            player.Play();
            this.Show();
            igm.Close();
            isDownloading = false;
            listView.Items.Clear();
            var files = Directory.GetFiles(@"C:\U.Rage\Games\", "*.ugi").Select(f => new ListViewItem(f)).ToArray();
            foreach (ListViewItem f in files)
            {
                this.LoadDataFromXml(f);
            }

      }
    }
24.04.2013

Përgjigjet:


1

Kur telefononi CancelAsync, objekti AsyncCompletedEventArgs i kaluar në kthimin e përfunduar të thirrjes do të ketë veçorinë Cancelled të vendosur në true. Kështu që mund të shkruani:

void client_InstallFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    if(e.Cancelled)
    {
        // delete the partially-downloaded file
        return;
    }
    // unzip and do whatever...
    using (ZipFile zip = ZipFile.Read(@"C:\U.Rage\Downloads\" + installID + "Install.zip"))

Shikoni dokumentacioni për më shumë informacion.

24.04.2013
  • Mirë. Anulo këtë funksion, por ai ende po shkarkon të vjetrën :P Si ta hap transmetimin ose ta zëvendësosh me lidhjen e re të shkarkimit? 24.04.2013
  • Ai anulon shkarkimin e vjetër dhe krijon një skedar të ri dl, por ende shton bajt në skedarin e vjetër 24.04.2013
  • Faleminderit, e rregullova, harrova ta bëj publik WebClient-in tim :) 24.04.2013
  • Downvoter, është zakon të japë një arsye për votën kundër. 04.04.2016

  • 2

    Këtu është metoda për shkarkimin e të dhënave asinkronike që mbështet anulimin:

    private static async Task<byte[]> downloadDataAsync(Uri uri, CancellationToken cancellationToken)
    {
        if (String.IsNullOrWhiteSpace(uri.ToString()))
            throw new ArgumentNullException(nameof(uri), "Uri can not be null or empty.");
    
        if (!Uri.IsWellFormedUriString(uri.ToString(), UriKind.Absolute))
            return null;
    
        byte[] dataArr = null;
        try
        {
            using (var webClient = new WebClient())
            using (var registration = cancellationToken.Register(() => webClient.CancelAsync()))
            {
                dataArr = await webClient.DownloadDataTaskAsync(uri);
            }
        }
        catch (WebException ex) when (ex.Status == WebExceptionStatus.RequestCanceled)
        {
            // ignore this exception
        }
    
        return dataArr;
    }
    
    18.09.2016

    3

    Përgjigja e zgjedhur nuk funksionoi siç duhet për mua. Ja çfarë bëra:

    Kur ata klikojnë butonin anuloj unë e thërras

    Client.CancelAsync();
    

    Dhe më pas në Web.Client DownloadFileCompleted:

    Client.DownloadFileCompleted += (s, e) =>
    {
          if (e.Cancelled)
          {
              //cleanup delete partial file
              Client.Dispose();                    
              return;
          }
     }
    

    Dhe më pas, kur përpiqeni të ri-shkarkoni, thjesht krijoni një klient të ri:

    Client = WebClient();
    

    Në këtë mënyrë parametrat e vjetër asinkronikë nuk do të mbahen.

    24.04.2015
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..