在foreach中使用延迟()

时间:2014-07-24 08:26:23

标签: c# directory

我有一个临时文件夹,我有一些文件,我想要做的是一次一个地复制到另一个文件夹(但它必须在“copys”之间有一些延迟)因为我必须做的每个文件一些人使用它。
所以它将是

  1. 将旧文件从c:\temp复制到c:\correctFolder
  2. 使用此文件进行一些操作(这就是我需要延迟的原因)。
  3. 复制下一个文件
  4. 到目前为止,我的代码是

    var sortedFiles = new DirectoryInfo(@"C:\Temp").GetFiles()
                                                   .OrderBy(f => f.LastWriteTime)
                                                   .ToList();
    
    
    foreach(var p in sortedFiles) 
    {
        File.Copy(@"C:\Temp\" + p, @"C:\correctFolder\" + p);
        //delay
    }
    

    我无法使用System.Threading.Thread.Sleep(60000);,因为它会停止所有内容,我只想延迟foreach,因此我可以使用该文件..

2 个答案:

答案 0 :(得分:2)

如果您需要阻止foreach的下一次迭代,只需调用复制后需要调用的代码:

var sortedFiles = new DirectoryInfo(@"C:\Temp")
                      .GetFiles()
                      .OrderBy(f => f.LastWriteTime)
                      .ToList();


foreach(var file in sortedFiles) 
{
    var sourceFile = Path.Combine(@"C:\Temp\", file);
    var destinationFile = Path.Combine(@"C:\correctFolder\", file);

    File.Copy(sourceFile, destinationFile);

    SomeOtherMethod(destinationFile);
}

SomeOtherMethod()返回之前,foreach的下一次迭代不会执行。

答案 1 :(得分:0)

在单独的帖子中对文件执行任何操作。您可以使用Sleep进行延迟,因为"它不会停止所有内容"。您的申请将做出回应并保持冷静。