複製和訪問文件時,我遇到了多線程問題。訪問由單獨線程創建的文件
我有一個服務,即下載和解壓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