复制和访问文件时,我遇到了多线程问题。
我有一项服务,它下载并解压缩 Zip 存档,然后将文件从解压缩文件夹复制到正确的位置:
//Download, and uzip archive...
//Copy a needed file to its right location
File.Copy(fileName, fileDestination);
然后我启动一个单独的线程,它需要访问复制的文件:
TheadPool.QueueUserWorkItem(s => processCopiedFile(fileDestination));
这是来自 ProcessCopiedFile 的代码片段:
private void ProcessCopiedFile(string filePath)
{
...
//Load the file, previously copied here
var xml = XDocument.Load(filePath);
...
//Do other work...
}
XDoument.Load 调用失败并出现异常:
The process cannot access the file <FileName> because it is used by another process.
似乎 File.Copy 保持结果文件锁定。当所有工作同步进行时,它可以正常工作。你有什么想法吗?谢谢。