private async Task <IObjectEditor[]> AddEditorsAsync(IList newItems) { Task <IObjectEditor>[] newEditorTasks = new Task <IObjectEditor> [newItems.Count]; for (int i = 0; i < newEditorTasks.Length; i++) { newEditorTasks[i] = EditorProvider.GetObjectEditorAsync(newItems[i]); } IObjectEditor[] newEditors = await Task.WhenAll(newEditorTasks); for (int i = 0; i < newEditors.Length; i++) { IObjectEditor editor = newEditors[i]; if (editor == null) { continue; } var notifier = editor.Properties as INotifyCollectionChanged; if (notifier != null) { notifier.CollectionChanged += OnObjectEditorPropertiesChanged; } } this.objEditors.AddRange(newEditors); return(newEditors); }
private async Task <IReadOnlyList <ObjectTreeElement> > QueryChildrenAsync(IEditorProvider provider) { var targets = await provider.GetChildrenAsync(Editor.Target); List <Task <IObjectEditor> > editorTasks = new List <Task <IObjectEditor> > (); foreach (object target in targets) { editorTasks.Add(provider.GetObjectEditorAsync(target)); } IObjectEditor[] editors = await Task.WhenAll(editorTasks); return(editors.Select(e => new ObjectTreeElement(provider, e)).ToArray()); }