运行任务列表时发生System.ArgumentOutOfRangeException

时间:2019-06-21 14:18:33

标签: c# wpf task

我有一个方法在for循环中的约20个对象上运行。我希望循环的每次迭代都以新任务执行该方法,以防止在工作进行时GUI停滞。但是,我注意到在创建任务之后,我在输出中出现了System.ArgumentOutOfRangeException错误。最终,整个应用会因System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index'而崩溃。

我的第一个想法是这是循环中的一个简单错误,当前的迭代索引不匹配,但事实并非如此。

这是我的循环:

Collection<string> tableNames = GetTableNames(path); //just gets a collection of strings
var tasks = new List<Task>();
for (int i = 0; i < tableNames.Count; i++)
{
    var addTask = Task.Run(() => { AddLayer(tableNames[i]); });
    tasks.Add(addTask);
}
await Task.WhenAll(tasks);
ResumeRefresh(); //I want this to be called after all the tasks complete

不确定这是否重要,但是在for循环中AddLayer方法的末尾是一个作用在GUI控件上的函数调用,因此我在函数调用处执行此操作:

private void AddLayer(string tableName)
{
    //some work done here
    Application.Current.Dispatcher.BeginInvoke((Action)(() => Map.Layers.Add(layer)))
}

0 个答案:

没有答案