Я нахожусь в процессе создания простого приложения, которое загружает 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;
}
}
}