Лучший способ сделать то, что вы просите, это, вероятно, установить собственный тайм-аут для вызова.
По сути, создайте таймер, который будет сбрасываться каждый раз при возникновении события DownloadProgressChanged. Таким образом, если вы не получите никаких обновлений прогресса в течение вашего периода ожидания, вы можете вызвать команду CancelAsync на WebClient, чтобы не ждать вечно.
Это единственный способ, которым я смог это сделать.