private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { if (connectionsListView.SelectedItems.Count == 0 || !(connectionsListView.SelectedItems[0] is ConnectionListViewItem)) { e.Cancel = true; return; } ConnectionListViewItem item = (ConnectionListViewItem)connectionsListView.SelectedItems[0]; bool isDesktopConnection = item.Connection is DesktopConnection; disconnectToolStripMenuItem.Enabled = isDesktopConnection; connectToolStripMenuItem.Enabled = isDesktopConnection; }
private void LoadConnectionsAndNetworks() { foreach (ListViewItem item in connectionsListView.Items) { item.Remove(); } foreach (Connection connection in ConnectionMonitor.Connections) { ListViewItem item = new ConnectionListViewItem(connection, ConnectionsGroup); connectionsListView.Items.Add(item); } foreach (Network network in ConnectionMonitor.Networks) { ListViewItem item = new NetworkListViewItem(network, NetworksGroup); connectionsListView.Items.Add(item); } }
private void ShowConnectionInfomation() { try { for (; ;) { Thread.Sleep(100); if (_mainWindow.SelectedTab != MainWindowTabType.Information) { continue; } var connectionInformation = _amoebaManager.ConnectionInformation.ToArray(); Dictionary <int, Information> dic = new Dictionary <int, Information>(); foreach (var item in connectionInformation.ToArray()) { dic[(int)item["Id"]] = item; } Dictionary <int, ConnectionListViewItem> dic2 = new Dictionary <int, ConnectionListViewItem>(); this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { foreach (var item in _listViewItemCollection.ToArray()) { dic2[item.Id] = item; } })); List <ConnectionListViewItem> removeList = new List <ConnectionListViewItem>(); this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { foreach (var item in _listViewItemCollection.ToArray()) { if (!dic.ContainsKey(item.Id)) { removeList.Add(item); } } })); List <ConnectionListViewItem> newList = new List <ConnectionListViewItem>(); Dictionary <ConnectionListViewItem, Information> updateDic = new Dictionary <ConnectionListViewItem, Information>(); bool clearFlag = false; var selectItems = new List <ConnectionListViewItem>(); if (removeList.Count > 100) { clearFlag = true; removeList.Clear(); updateDic.Clear(); foreach (var information in connectionInformation) { newList.Add(new ConnectionListViewItem(information)); } HashSet <int> hid = new HashSet <int>(); this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() => { hid.UnionWith(_listView.SelectedItems.OfType <ConnectionListViewItem>().Select(n => n.Id)); })); foreach (var item in newList) { if (hid.Contains(item.Id)) { selectItems.Add(item); } } } else { foreach (var information in connectionInformation) { ConnectionListViewItem 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 ConnectionListViewItem(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) { } }