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);
            }
        }
Exemplo n.º 3
0
        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)
            {
            }
        }