private void ShowDownloadItem() { try { for (;;) { var informaitonDic = new Dictionary <int, Information>(); { string[] words = null; { string searchText = null; this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { searchText = _searchTextBox.Text; })); if (!string.IsNullOrWhiteSpace(searchText)) { words = searchText.ToLower().Split(new string[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries); } } foreach (var item in _amoebaManager.DownloadingInformation.ToArray()) { if (words != null) { var text = ((string)item["Path"] ?? "").ToLower(); if (!words.All(n => text.Contains(n))) { continue; } } informaitonDic[(int)item["Id"]] = item; } } var listViewModelDic = new Dictionary <int, DownloadListViewModel>(); var removeList = new List <DownloadListViewModel>(); this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { foreach (var item in _listViewModelCollection.ToArray()) { listViewModelDic[item.Id] = item; if (!informaitonDic.ContainsKey(item.Id)) { removeList.Add(item); } } })); var resultList = new List <DownloadListViewModel>(); var updateDic = new Dictionary <DownloadListViewModel, Information>(); bool clearFlag = false; var selectItems = new List <DownloadListViewModel>(); if (removeList.Count > 100) { clearFlag = true; removeList.Clear(); updateDic.Clear(); foreach (var information in informaitonDic.Values) { resultList.Add(new DownloadListViewModel(information)); } var hid = new HashSet <int>(); this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { hid.UnionWith(_listView.SelectedItems.OfType <DownloadListViewModel>().Select(n => n.Id)); })); foreach (var item in resultList) { if (hid.Contains(item.Id)) { selectItems.Add(item); } } } else { foreach (var information in informaitonDic.Values) { DownloadListViewModel item; if (listViewModelDic.TryGetValue((int)information["Id"], out item)) { updateDic[item] = information; } else { resultList.Add(new DownloadListViewModel(information)); } } } this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { bool sortFlag = false; if (resultList.Count != 0) { sortFlag = true; } if (removeList.Count != 0) { sortFlag = true; } if (updateDic.Count != 0) { sortFlag = true; } if (clearFlag) { _listViewModelCollection.Clear(); } foreach (var item in resultList) { _listViewModelCollection.Add(item); } foreach (var item in removeList) { _listViewModelCollection.Remove(item); } foreach (var item in updateDic) { item.Key.Information = item.Value; } if (clearFlag) { _listView.SelectedItems.Clear(); _listView.SetSelectedItems(selectItems); } if (sortFlag) { this.Sort(); } })); for (int i = 0; i < 10; i++) { Thread.Sleep(1000 * 3); if (_mainWindow.SelectedTab == MainWindowTabType.Download) { break; } } } } catch (Exception) { } }
public PointM[] GetLinePoints() { return(_Points.ToArray()); }
private void ShowDownloadItem() { try { for (; ;) { Thread.Sleep(100); if (_mainWindow.SelectedTab != MainWindowTabType.Download) { continue; } var downloadingInformation = _amoebaManager.DownloadingInformation.ToArray(); Dictionary <int, Information> dic = new Dictionary <int, Information>(); foreach (var item in downloadingInformation.ToArray()) { dic[(int)item["Id"]] = item; } Dictionary <int, DownloadListViewItem> dic2 = new Dictionary <int, DownloadListViewItem>(); this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { foreach (var item in _listViewItemCollection.ToArray()) { dic2[item.Id] = item; } })); List <DownloadListViewItem> removeList = new List <DownloadListViewItem>(); this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { foreach (var item in _listViewItemCollection.ToArray()) { if (!dic.ContainsKey(item.Id)) { removeList.Add(item); } } })); List <DownloadListViewItem> newList = new List <DownloadListViewItem>(); Dictionary <DownloadListViewItem, Information> updateDic = new Dictionary <DownloadListViewItem, Information>(); bool clearFlag = false; var selectItems = new List <DownloadListViewItem>(); if (removeList.Count > 100) { clearFlag = true; removeList.Clear(); updateDic.Clear(); foreach (var information in downloadingInformation) { newList.Add(new DownloadListViewItem(information)); } HashSet <int> hid = new HashSet <int>(); this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { hid.UnionWith(_listView.SelectedItems.OfType <DownloadListViewItem>().Select(n => n.Id)); })); foreach (var item in newList) { if (hid.Contains(item.Id)) { selectItems.Add(item); } } } else { foreach (var information in downloadingInformation) { DownloadListViewItem item = null; if (dic2.ContainsKey((int)information["Id"])) { item = dic2[(int)information["Id"]]; } if (item != null) { if (!CollectionUtilities.Equals(item.Information, information)) { updateDic[item] = information; } } else { newList.Add(new DownloadListViewItem(information)); } } } this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { bool sortFlag = false; if (newList.Count != 0) { sortFlag = true; } if (removeList.Count != 0) { sortFlag = true; } if (updateDic.Count != 0) { sortFlag = true; } if (clearFlag) { _listViewItemCollection.Clear(); } foreach (var item in newList) { _listViewItemCollection.Add(item); } foreach (var item in removeList) { _listViewItemCollection.Remove(item); } foreach (var item in updateDic) { item.Key.Information = item.Value; } if (clearFlag) { _listView.SelectedItems.Clear(); _listView.SetSelectedItems(selectItems); } if (sortFlag) { this.Sort(); } })); Thread.Sleep(1000 * 3); } } catch (Exception) { } }
private void ShowConnectionInfomation() { try { for (;;) { var connectionInformation = _amoebaManager.ConnectionInformation.ToArray(); var dic = new Dictionary <int, Information>(); foreach (var item in connectionInformation.ToArray()) { dic[(int)item["Id"]] = item; } var dic2 = new Dictionary <int, ConnectionListViewModel>(); this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { foreach (var item in _listViewModelCollection.ToArray()) { dic2[item.Id] = item; } })); var removeList = new List <ConnectionListViewModel>(); this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { foreach (var item in _listViewModelCollection.ToArray()) { if (!dic.ContainsKey(item.Id)) { removeList.Add(item); } } })); var newList = new List <ConnectionListViewModel>(); var updateDic = new Dictionary <ConnectionListViewModel, Information>(); bool clearFlag = false; var selectItems = new List <ConnectionListViewModel>(); if (removeList.Count > 100) { clearFlag = true; removeList.Clear(); updateDic.Clear(); foreach (var information in connectionInformation) { newList.Add(new ConnectionListViewModel(information)); } var hid = new HashSet <int>(); this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { hid.UnionWith(_listView.SelectedItems.OfType <ConnectionListViewModel>().Select(n => n.Id)); })); foreach (var item in newList) { if (hid.Contains(item.Id)) { selectItems.Add(item); } } } else { foreach (var information in connectionInformation) { ConnectionListViewModel item = null; if (dic2.ContainsKey((int)information["Id"])) { item = dic2[(int)information["Id"]]; } if (item != null) { updateDic[item] = information; } else { newList.Add(new ConnectionListViewModel(information)); } } } this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { bool sortFlag = false; if (newList.Count != 0) { sortFlag = true; } if (removeList.Count != 0) { sortFlag = true; } if (updateDic.Count != 0) { sortFlag = true; } if (clearFlag) { _listViewModelCollection.Clear(); } foreach (var item in newList) { _listViewModelCollection.Add(item); } foreach (var item in removeList) { _listViewModelCollection.Remove(item); } foreach (var item in updateDic) { item.Key.Information = item.Value; } if (clearFlag) { _listView.SelectedItems.Clear(); _listView.SetSelectedItems(selectItems); } if (sortFlag) { this.Sort(); } })); Thread.Sleep(1000 * 3); } } catch (Exception) { } }