Самый простой способ - использовать
WebClient.DownloadProgressChanged
using (WebClient client = new WebClient())
{
client.DownloadProgressChanged += MyCounterHandler;
client.DownloadFileCompleted += MyDoneHandler;
client.DownloadFileAsync(URI, tmpPath);
}