Amoeba.Windows.ShareControl.ShowShareItem C# (CSharp) Method

ShowShareItem() private method

private ShowShareItem ( ) : void
return void
        private void ShowShareItem()
        {
            try
            {
                for (;;)
                {
                    var informaitonDic = new Dictionary<string, 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.ShareInformation.ToArray())
                        {
                            if (words != null)
                            {
                                var text = ((string)item["Path"] ?? "").ToLower();
                                if (!words.All(n => text.Contains(n))) continue;
                            }

                            informaitonDic[(string)item["Path"]] = item;
                        }
                    }

                    var listViewModelDic = new Dictionary<string, ShareListViewModel>();
                    var removeList = new List<ShareListViewModel>();

                    this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
                    {
                        foreach (var item in _listViewModelCollection.ToArray())
                        {
                            listViewModelDic[item.Path] = item;

                            if (!informaitonDic.ContainsKey(item.Path))
                            {
                                removeList.Add(item);
                            }
                        }
                    }));

                    var resultList = new List<ShareListViewModel>();
                    var updateDic = new Dictionary<ShareListViewModel, Information>();

                    bool clearFlag = false;
                    var selectItems = new List<ShareListViewModel>();

                    if (removeList.Count > 100)
                    {
                        clearFlag = true;

                        removeList.Clear();
                        updateDic.Clear();

                        foreach (var information in informaitonDic.Values)
                        {
                            resultList.Add(new ShareListViewModel(information));
                        }

                        var hpath = new HashSet<string>();

                        this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
                        {
                            hpath.UnionWith(_listView.SelectedItems.OfType<ShareListViewModel>().Select(n => n.Path));
                        }));

                        foreach (var item in resultList)
                        {
                            if (hpath.Contains(item.Path))
                            {
                                selectItems.Add(item);
                            }
                        }
                    }
                    else
                    {
                        foreach (var information in informaitonDic.Values)
                        {
                            ShareListViewModel item;

                            if (listViewModelDic.TryGetValue((string)information["Path"], out item))
                            {
                                updateDic[item] = information;
                            }
                            else
                            {
                                resultList.Add(new ShareListViewModel(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.Share) break;
                    }
                }
            }
            catch (Exception)
            {

            }
        }