У меня проблема с WebClient, когда WebClient.DownloadFileAsync не сообщает DownloadProgressChangedEventArgs до тех пор, пока не будет запущен AsyncCompletedEventHandler.
У меня есть метод downloadFileAsync, реализованный в классе с именем HTTP в dll с именем Test.dll.,Это в основном сводится к запуску WebClient.DownloadFileAsync (новый Uri (URL), downloadLocation);
Вот тестовый код, который я использую, чтобы обернуть его.
Program.cs просто делает это:
namespace DL1
{
class Program
{
static void Main(string[] args)
{
FLFront start = new FLFront();
}
}
}
FLFront.cs таков:
using System;
using System.ComponentModel;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Timers;
using Test;
namespace DL1
{
class FLFront
{
static HTTP dlMGR;
static Boolean downloadingCurrently = false;
static System.Timers.Timer canDLChecker = new System.Timers.Timer();
public FLFront()
{
SpecialWebClient swc = new SpecialWebClient();
swc.setAmazonArt();
dlMGR = new HTTP(swc);
dlMGR.downloadJobs.Enqueue(@"http://downloads.sourceforge.net/project/sevenzip/7-Zip/9.20/7z920-x64.msi?r=http%3A%2F%2Fwww.7-zip.org%2Fdownload.html&ts=1325195085&use_mirror=superb-dca2");
//dlMGR.downloadJobs.Enqueue(@"http://www.ubuntu.com/start-download?distro=desktop&bits=64&release=latest");
dlMGR.downloadJobs.Enqueue(@"http://ftp.heanet.ie/mirrors/damnsmalllinux.org/current/dsl-4.4.10-initrd.iso");
dlMGR.swc.DownloadFileCompleted += new AsyncCompletedEventHandler(dlCompleted);
dlMGR.swc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(dlProgress);
canDLChecker.Elapsed += new ElapsedEventHandler(downloadFile);
canDLChecker.Interval = 500;
canDLChecker.Enabled = true;
Thread.Sleep(3000000);
}
void dlCompleted(object sender, AsyncCompletedEventArgs e)
{
downloadingCurrently = false;
if (File.Exists(dlMGR.downloadLocation))
{
FileInfo dlInfo = new FileInfo(dlMGR.downloadLocation);
Console.WriteLine("Received Size: " + dlInfo.Length.ToString() + " Bytes");
if (dlInfo.Length == dlMGR.responseContentLength)
{
//downloadLocation.ren
//Console.WriteLine("Error: This file was not downloaded for some reason");
Console.WriteLine("File successfully downloaded.");
File.Move(dlMGR.downloadLocation, dlMGR.downloadLocation.Replace(".part", ""));
}
else
{
Console.WriteLine("File size mismatch.");
}
}
else
Console.WriteLine("File doesn't exist");
}
void dlProgress(object sender, DownloadProgressChangedEventArgs e)
{
//Console.WriteLine(e.BytesReceived);
Console.WriteLine(e.ProgressPercentage + "% ");
}
void downloadFile()
{
if (!downloadingCurrently)
{
if (dlMGR.downloadJobs.Count > 0)
{
downloadingCurrently = true;
Console.WriteLine("Download starting: " + dlMGR.downloadJobs.Peek());
StringBuilder dlResult = dlMGR.downloadFileAsync(dlMGR.downloadJobs.Dequeue(), @"C:\", LoggingLevel.ErrorsOnly);
Console.Write(dlResult.ToString());
if (dlResult.ToString().Contains("Error: "))
dlFailed();
}
else
{
Console.WriteLine("No more download jobs exist. Exiting now.");
Environment.Exit(0);
}
}
}
void downloadFile(object source, ElapsedEventArgs e)
{
downloadFile();
//Console.WriteLine("Check Occurred");
}
void dlFailed()
{
downloadingCurrently = false;
Console.WriteLine("Download Failed.");
}
}
}
У меня сейчас есть только несколько тестовых файлов, но код не сообщает о каком-либо прогрессе, пока файлы в основномзагрузка завершена
Мысли о том, почему не сообщается о прогрессе?