复制和访问文件时,我遇到了多线程问题。访问由单独线程创建的文件
我有一个服务,即下载和解压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保持锁定结果文件。什么时候同步工作,它的工作没有错误。 你有什么想法吗? Thx。
首先我打电话File.Copy(synchronuously),然后我开始新的主题。原因File.Copy同步调用,它确保在新线程启动之前完成其工作。或者我错了某处? – Skog
+1 - 只是为了澄清最后一部分:当文件被复制时,Windows对文件进行独占锁定。 – ebb