private void DownloadFile(TestFileInfo fileToDownload)
{
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += OnDownloadProgressChanged;
webClient.DownloadDataCompleted += OnDownloadDataCompleted;
// Вызов *Async метода на экземпляре WebClient'a заставляет его "запомнить" поток где был произведен этот вызов
// и выполнять делегаты своих событий в этом потоке. Если вызов идет из UI потока, то у нас отпадает
// необходимость в использовании метода Invoke или других способов выполнения кода в UI потоке.
webClient.DownloadDataAsync(new Uri("http://ftp.byfly.by/test/" + fileToDownload.FileName), fileToDownload);
}