2014-09-25 63 views
-3

当我尝试调用DownloadFileAsync时,我的程序崩溃,出现错误“WebClient不支持并发I/O操作”。我应该怎么做才能解决这个问题?WebClient不支持并发I/O错误

 WebClient klient = new WebClient(); 

     MatchCollection matches = Regex.Matches(storage, pattern); 

     Match[] odkazy = new Match[matches.Count]; 
     List<string> neco = new List<string> { }; 

     for (int i=0;i<matches.Count;i++) 
     { 
      matches.CopyTo(odkazy, 0); 
      string ano = odkazy[i].ToString(); 
      neco.Add(ano); 
      klient.DownloadFileAsync(new Uri(neco[i]), @"c:\picture{0}.png",i); 
      Debug.WriteLine(neco[i]); 
     } 
+0

是否有错误信息...?你是否试图让我们调试你的代码? :P – 2014-09-25 21:32:26

+0

在IntelliTrace中,它表示:异常:引发:“WebClient不支持并发I/O操作。” (System.NotSupportedException) 抛出了System.NotSupportedException:“WebClient不支持并发I/O操作。” – 2014-09-25 21:34:34

回答

0

您需要为每次下载使用新的WebClient实例;它一次只能做一个,而且你正试图用你的for循环快速地做一堆。初始化在每个迭代一个新问题:

for (int i=0;i<matches.Count;i++) 
{ 
    matches.CopyTo(odkazy, 0); 
    string ano = odkazy[i].ToString(); 
    neco.Add(ano); 
    WebClient klient = new WebClient(); 
    klient.DownloadFileAsync(new Uri(neco[i]), @"c:\picture{0}.png",i); 
    Debug.WriteLine(neco[i]); 
} 

或者你可以“链”的下载,并开始在单一网络客户端的DownloadFileCompleted事件下一个。