Solution 1:

It looks like Dispose() is not working correct within the using() statement:

using (WebClient client = new WebClient())
 { ... }

Workaround without a using() statement:

WebClient client = new WebClient();
client.DownloadFileCompleted += OnDownloadFileCompleted;

when download is completed:

client.Dispose() 

It works for me.