private void DoDownloadAndSaveFile(ref bool cancelled, FileData fileData, Uri url, HttpWebResponse response)
{
int bytesDownloaded = 0;
var fileSize = response.ContentLength;
var fileTimeStamp = response.LastModified;
using (var mClient = new WebClient())
{
if (!AlreadyDownloaded(fileData, fileTimeStamp))
{
using (var webStream = mClient.OpenRead(url))
{
using (var fileStream = new FileStream(fileData.DiskFile, FileMode.Create, FileAccess.Write,
FileShare.None))
{
_fileName = fileData.ProjectType + ": " + fileData.FileName;
int bytesRead = 0;
var byteBuffer = new byte[fileSize];
if (webStream != null)
{
var start = DateTime.Now;
while ((bytesRead = webStream.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
{
fileStream.Write(byteBuffer, 0, bytesRead);
bytesDownloaded += bytesRead;
UpdateDownloadProgressAndSpeed(bytesDownloaded, byteBuffer, start);
if (updateWorkerThread.CancellationPending)
{
cancelled = true;
break;
}
}
}
}
}
using (var writer = new StreamWriter(fileData.TimestampFile))
{
writer.Write(fileTimeStamp.ToString());
}
_downloadedFile = true;
}
else
{
pbValue.BeginInvoke(
new EventHandler(
delegate
{
pbValue.Value = 100;
Application.DoEvents();
}));
}
}
}