我迫切希望找到解决问题的方法。
以下是为中的每个项目生成不同任务的代码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);
现在我的问题是当它运行时,它只运行数组中的最后一项。知道我做错了什么吗?
我不想使用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);
}
}
});
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)