我正在尝试在WPF中实现进度条。我循环遍历文件路径列表(List)并对文件执行一些操作。我想跟踪进程的进度,但它无法正常工作。在这种情况下,每次调用方法tagAndMoveFiles()时,都会使用foreach列表中的相同项调用它,但会调用适当的次数。我对代表不太好(显然)......我已经包含了所有相关代码。谢谢你的帮助。 (uploadProgress是进度条)
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();
}
答案 0 :(得分:4)
委托每次循环捕获相同的实例。所以你需要在循环中添加一个局部变量,就像这样......
foreach(string sourcefilepath in impJob.SourceFilePaths)
{
string x = sourcefilepath;
...
{
tagAndMoveFiles(x, ...
}
....
}
答案 1 :(得分:1)
您遇到了这个问题:Access to Modified Closure (2)
简短:您需要在foreach
循环中包含一个局部变量来捕获sourcefilepath
并将其传递给代理。