private async void UpdateExecute() { try { projectWatcher?.Watcher?.Dispose(); if (inUpdate || !Directory.Exists(ShortcutFolder)) { return; } // projectWatcher = new FileWatcherRx(ShortcutFolder, "", (NotifyFilters) 19, WatcherChangeTypes.All); // projectWatcher.Watcher.IncludeSubdirectories = true; // projectWatcher.Created.ObserveOn(dispatcher).Subscribe(s => OnCreatedProject(s.EventArgs)); // projectWatcher.Deleted.ObserveOn(dispatcher).Subscribe(s => OnDeletedProject(s.EventArgs)); // projectWatcher.Renamed.ObserveOn(dispatcher).Subscribe(s => OnRenamedProject(s.EventArgs)); // projectWatcher.Changed.ObserveOn(dispatcher).Subscribe(s => OnChangedProject(s.EventArgs)); inUpdate = true; var files = new List <FileInfo>(); AllElements.Clear(); AllProjects.Clear(); await ShowProgressDialog(c => { c.SetIndeterminate(); if (ShortcutFolder == null || !Directory.Exists(ShortcutFolder)) { return; } files = GetShortcutFiles(ShortcutFolder).Result; }, "Загрузка элементов...", "", false); if (!files.Any()) { ShowMessage("Не найдены файлы быстрых ссылок (xml)"); return; } foreach (var xmls in files.ChunkBy(50)) { var items = await GetShortcutItems(xmls); foreach (var i in items) { Checks.CheckElement(i); i.Project.Shortcuts.Add(i); AllElements.Add(i); } } var projects = Project.GetProjects(); AllProjects.AddRange(projects); ProjectsVM.UpdateProjects(); } catch (Exception ex) { ShowMessage(ex.ToString()); } finally { inUpdate = false; } }