The*_*Guy 5 .net c# wpf task-parallel-library
我迫切希望找到解决问题的办法.
以下是为每个项目生成不同任务的代码List<AccountContactView>.
List<AccountContactViewModel> selectedDataList
= DataList.Where(
dataList => (bool) dataList.GetType()
.GetProperty("IsChecked")
.GetValue(dataList, new object[0]) == true
).ToList();
this.IsEnabled = false;
Task validateMarked = Task.Factory.StartNew(() =>
{
foreach (AccountContactViewModel viewModel in selectedDataList)
{
if (viewModel != null)
{
Task validate = Task.Factory.StartNew(
() => ValidateAccount(viewModel),
(TaskCreationOptions)TaskContinuationOptions.AttachedToParent);
}
}
});
validateMarked.ContinueWith(x => this.IsEnabled = true);
Run Code Online (Sandbox Code Playgroud)
现在我的问题是它运行时,它只运行数组中的最后一项.关于我做错了什么的任何想法?
我不想使用Parallel.ForEach因为它没有提供必要的并行效果来增加基于每个任务完成的进度条.
这可能是lambda范围问题.
您是否尝试将viewModel分配给局部变量,然后再将其传递给StartNew方法
...
Task validateMarked = Task.Factory.StartNew(() =>
{
foreach (AccountContactViewModel viewModel in selectedDataList)
{
var localViewModel = viewModel;
if (localViewModel != null)
{
Task validate = Task.Factory.StartNew(
() => ValidateAccount(localViewModel),
(TaskCreationOptions)TaskContinuationOptions.AttachedToParent);
}
}
});
...
Run Code Online (Sandbox Code Playgroud)