Я написал вспомогательный класс для загрузки файла с сервера с помощью класса webclient.Код работал хорошо до недавнего времени.Внезапно код не работает, прогресс загрузки всегда равен 0, а количество полученных байтов всегда равно -1.Загрузка работает нормально, но проблема только в фактическом изменении прогресса.Процесс загрузки остается нулевым от начала до конца процесса загрузки, даже общее количество байтов, которые нужно получить, остается равным -1.
Пожалуйста, найдите образец кода, указанный ниже.
public class FileDownloader
{
private string _zipFilePath;
private string _destinationPath;
private int _productId;
public Action<int,int> progressListener;
private WebClient _client;
public void Download(string cloudPath, string localPath,int id)
{
_productId = id;
_zipFilePath = localPath +id+ ".zip";
_destinationPath = localPath + id;
if (!Directory.Exists(localPath))
{
Directory.CreateDirectory(localPath);
}
_client = new WebClient();
if (cloudPath != "")
{
Uri uri = new Uri(cloudPath);
_client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCallback);
_client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
_client.DownloadFileAsync(uri, _zipFilePath);
}else
{
progressListener?.Invoke(_productId, -1);
}
}
public void DownloadProgressCallback(object sender, DownloadProgressChangedEventArgs e)
{
if(e.ProgressPercentage != 100)
progressListener?.Invoke(_productId, e.ProgressPercentage);
}
public void CancelDownload()
{
_client.CancelAsync();
}
public void DownloadFileCallback(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled == false && e.Error == null)
{
//UnzipContent(_destinationPath,_zipFilePath);
UnzipHandler unzipHandler = new UnzipHandler(_destinationPath, _zipFilePath,new UnzipCompletionCallback(UnzippedCourse));
Thread thread = new Thread(new ThreadStart(unzipHandler.UnzipContent));
thread.Start();
}
else
{
DeleteZip(_zipFilePath);
progressListener?.Invoke(_productId, -1);
}
}
private void DeleteZip(string zipPath)
{
if (File.Exists(zipPath))
{
File.Delete(zipPath);
}
}
public void UnzippedCourse(bool status)
{
DeleteZip(_zipFilePath);
if(status)
progressListener?.Invoke(_productId, 100);
else
progressListener?.Invoke(_productId, -1);
}
public delegate void UnzipCompletionCallback(bool result);
}