Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
return BitConverter.ToString(checkSumm) == summ.ToUpper() ? true : false;
byte[] fileData = new byte[fs.Length];
. Вот прямо весь файл в память? И прямо по всему файлу считаем хэш?BitConverter.ToString(checkSumm) == summ.ToUpper()
уже имеет тип bool
, поэтому дополнительно проверять его на true
/false
бессмысленно. Итого:return BitConverter.ToString(checkSumm) == summ.ToUpper();
return BitConverter.ToString(checkSumm) == summ.ToUpper() ? true : false;
if(BitConverter.ToString(checkSumm) == summ.ToUpper())
{
return true;
}
else
{
return false;
}
BitConverter.ToString(checkSumm) == summ.ToUpper()
ex.Message
, если вы ловите эксепшн, брошенный Task.WaitAll()
? Я уж молчу про наличие таких приятных вещей, как ContinueWhenAll
и так далее… Уже если беретесь пользоваться TPL, то хоть изучите ее. Ну и я готов спорить, что ваша DownloadFile
нифига не асинхронна (а должна бы, потому что весь HttpClient
асинхронен, и именно там включается IOCP wait). using (var client = new WebClient())
{
try
{
if (showStatus && downloadPercent != null) { client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); }
client.DownloadFileAsync(new Uri(url + filename), localFile);
if (!Checksumm(localFile, xmlChecksumm) && File.Exists(localFile))
{
File.Delete(localFile);
client.DownloadFile(new Uri(url + filename), localFile);
}
}
catch (Exception ex)
{
debug.Save("private void DownloadFile(string filename, string xmlVersion, string xmlChecksumm)",
"Filename: " + filename + Environment.NewLine +
"Localname: " + (localFile != null ? localFile : "null") + Environment.NewLine +
"URL: " + url,
ex.Message);
}
}
DownloadFileAsync
, а просто сразу после него начинаем следующую операцию, которая сводится к удалению того, что мы только что скачали, и его перекачке заново, уже синхронно?Уважающие себя люди одновременно с написанием утилиты, читающей манифест, пишут утилиту, которая этот манифест создает.
checksumm
checksum
debug debug = new debug();
Debug
Task.Factory.StartNew(() => client.DownloadFile(new Uri(url + "settings.xml"), "settings.xml")).Wait();
await client.DownloadFileTaskAsync(...)
Task.WaitAll(task1, task2, task6);
await Task.WhenAll(...)
update_launcher update = new update_launcher();
UpdateLauncher
update.Check(true, progressBar1);
IProgress<T>
await client.DownloadFileTaskAsync(...)
Да, кстати, зачем вы храните в своём файле version.xml на сервере версии сборок? Ведь эту информацию можно получить всё тем же методом FileVersionInfo.GetVersionInfo?
Стоит также отметить отсутствие комментариев в коде, их наличие могло сократить статью в разы (например, при описании параметров функции)
Успехов.
Асинхронное обновление программы на C#