Текст ярлыка не обновляется сразу после загрузки c# - PullRequest
0 голосов
/ 30 апреля 2020

Я нахожусь в процессе создания простого приложения, которое загружает zip-файл в заданный каталог, и это прекрасно работает, и мне удалось показать ход загрузки и обновить индикатор выполнения. Проблема, с которой я сталкиваюсь, заключается в том, что после завершения загрузки приложение извлекает zip-файл в заданный пункт назначения, и все работает нормально. Моя проблема в том, что моя метка не меняет свой текст сразу, кажется, что он ждет, пока извлечение не будет завершено.

Что должно произойти, это так: текст метки говорит: «Загрузка файла», как только загрузка завершена, она должна скажем "Извлечение файла"

Я думаю, что проблема связана с методом загрузки Asyn c, но я не уверен.

Мой код:

using System;
using System.ComponentModel;
using System.Net;
using System.IO;
using Ionic.Zip;
using System.Diagnostics;
using System.Threading;

using MahApps.Metro.Controls;

namespace CloudBarsInstaller
{
    public partial class MainWindow : MetroWindow
    {
        WebClient client = new WebClient();

        private void Window_ContentRendered(object sender, EventArgs e)
        {
            client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(client_DownloadFileCompleted);
            client.DownloadFileAsync(new Uri(@"C:\NEWBARS\NewInstaller\BarsStaging\Distributable.zip"), @"C:\Temp2\Distributable.zip");
            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
        }

        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            var progress = e.ProgressPercentage;
            progressBar.Value = e.ProgressPercentage;
        }

        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
           Stopwatch stopwatch = Stopwatch.StartNew();
            lblStatus.Content = "Extracting Bars Zip File";
            System.Threading.Thread.Sleep(2000);
            stopwatch.Stop();
            //once download is done extract the file

            var directoryPath = @"C:\Temp2\Distributable.zip";
           string extractPath = @"C:\Temp2\BarsInstaller";

            using (ZipFile zip = new ZipFile(directoryPath))
            {
                //zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;

                zip.ExtractProgress += zipProgress;
                zip.ExtractAll(extractPath,ExtractExistingFileAction.OverwriteSilently);

            }
            //ZipFile.ExtractToDirectory(directoryPath, extractPath);
        }
        private void zipProgress(object sender, ExtractProgressEventArgs e)
        {
            if (e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten)
                this.progressBar.Value = (int)((e.BytesTransferred * 100) / e.TotalBytesToTransfer);

            else if (e.EventType == ZipProgressEventType.Extracting_AfterExtractAll)
                this.progressBar.Value = 100;
        }
    } 
}

1 Ответ

0 голосов
/ 01 мая 2020

Я сейчас решил эту проблему, проблема из-за блокировки потока. Я изменил код для загрузки файла по нажатию кнопки (что проще) и для обновления метки я использовал этот код:

lblStatus.Invoke((Action)delegate
{

    lblStatus.Text = "Extracting Bars Zip File";

});
...