private async Task OnLayerRemovingAsync(LayersRemovingEventArgs e) { // todo daro: revise usage of Task //await Task.Run(() => //{ foreach (IWorkList workList in _layerByWorkList .Where(pair => e.Layers.Contains(pair.Value)) .Select(pair => pair.Key).ToList()) { foreach (var observer in _observers) { observer.WorkListRemoved(workList); } List <WorkListObserver> emptyObservers = GetEmptyObservers(); foreach (var observer in emptyObservers) { UnregisterObserver(observer); } await QueuedTask.Run(() => { // ensure folder exists before commit EnsureFolderExists(GetLocalWorklistsFolder()); workList.Commit(); UnwireEvents(workList); //UnregisterViewModel(workList); _layerByWorkList.Remove(workList); _registry.Remove(workList); // Note daro: don't dispose work list here. Given the following situation. // Remove work list layer would dispose the source geodatabase (in GdbItemRepository). // Add work list layer again with same source geodatabase is going to throw an // exception, e.g. on SetStatus //workList.Dispose(); }); } //}); }
private async Task OnLayerRemovingAsync(LayersRemovingEventArgs e) { await Task.Run(() => { foreach (IWorkList worklist in GetAssociatedWorklists(e.Layers)) { Unload(worklist); // persist work list state worklist.Commit(); // Note daro: don't dispose work list here. Given the following situation. // Remove work list layer would dispose the source geodatabase (in GdbItemRepository). // Add work list layer again with same source geodatabase is going to throw an // exception, e.g. on SetStatus //workList.Dispose(); } }); }