DownloadCallback 中的 C# WebClient IOException

C# WebClient IOException in DownloadCallback

尝试下载 Minecraft 资产文件时,一半文件失败并出现下载错误:"An exception occurred during a WebClient request."

InnerException 为:“{"The process cannot access the file 'C:\Users\[redacted]\AppData\Roaming\[redacted]\Minecraft 1.10\assets\objects\bdbdf48ef6b5d0d23bbb02e17d04865216179f510a' because it is being used by another process."}”。

我正在使用 FileDownloadCompleted 事件。

我也试过加一个“.”到每个没有正确扩展名的文件的末尾,但它没有解决问题。

另外,这个问题不一致。部分同名文件下载正常,部分文件下载失败。不过也不是网络问题,我已经在多台电脑上测试过了。

如何解决这个异常?

作为权宜之计,我添加了一个 while 循环来等待文件可用。

else if(e.Error.InnerException is IOException)
                    {
                        bool canAccess = false;
                        while (!canAccess)
                        {
                            try
                            {
                                File.Move(Userstate[0], Userstate[0]);
                                canAccess = true;
                                Debug.Print("Can now access file: " + Userstate[0]);
                            }
                            catch(IOException) { }
                        }
                    }

此代码是 DownloadCallback 处理程序的一部分,并检查 e.Error.InnerException 的状态。这似乎不是最好的解决方案,但这是我想出的唯一解决方案。