2011-11-11 82 views
1

我想在WPF中实现一个进度条。我正在遍历文件路径列表(List)并对这些文件执行一些操作。我想跟踪过程的进度,但它无法正常工作。在这种情况下,每次调用方法tagAndMoveFiles()时,都会使用来自foreach列表中的相同项目调用它,但它被称为正确的次数。我对代表不太了解(显然)......我已经包含了所有相关的代码。谢谢你的帮助。 (上传进度是进度条)在foreach循环中的委托和调度器不能访问当前项目


 uploadProgress.Maximum = impJob.SourceFilePaths.Count; 
     DispatcherTimer timer = new DispatcherTimer(); 
     int progress = 0; 
     foreach (string sourcefilepath in impJob.SourceFilePaths) 
     { 
      Thread t = new Thread(new ThreadStart(
      delegate() 
      { 
        uploadProgress.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, 
        new Action(
         delegate 
          { 
           tagAndMoveFiles(sourcefilepath, targetFolder, impJob, sourceFileProcessed); 
           uploadProgress.Value = ++progress; 
           Thread.Sleep(100); 
          } 
         )); 
      } 
      )); 
      t.Start(); 
     } 

回答

3

代表每次都在循环中捕获相同的实例。所以你需要像这样在循环内添加一个局部变量...

foreach(string sourcefilepath in impJob.SourceFilePaths) 
{ 
    string x = sourcefilepath; 
    ... 
     { 
      tagAndMoveFiles(x, ... 
     } 
    .... 
}