Beispiel #1
0
        private void Search()
        {
            SearchTerm searchTerm = SearchControl.CreateSearchTerm();

            if (searchTerm.IsEmpty)
            {
                return;
            }
            int     instanceID = ++CurrentSearchID;
            MapTree tree       = GetCurrentMapTree();

            ScheduleParallelTask(() =>
            {
                Action actClear = () => SearchControl.lstResults.Items.Clear();
                SearchControl.Invoke(actClear);
                foreach (var n in GetNodesToSearch(tree, searchTerm.SearchSelectedHierarchy))
                {
                    if (instanceID != CurrentSearchID)
                    {
                        return;                                 //this is to cancel the search if searchTerm has changed
                    }
                    if (searchTerm.MatchNode(n))
                    {
                        Action actAdd = () => SearchControl.lstResults.Items.Add(n);
                        SearchControl.Invoke(actAdd);
                    }
                }
            });
        }