private void SearchNode(TreeNode node) { if(node == null || !(node.Tag is DataNode)) return; DataNode dataNode = node.Tag as DataNode; if(!dataNode.CanSearchNode) return; Find form = new Find(); if(form.ShowDialog() != DialogResult.OK) return; _searchState = new SearchStateWin(this) { RootNode = dataNode, SearchName = form.NameToken, SearchValue = form.ValueToken, DiscoverCallback = SearchDiscoveryCallback, CollapseCallback = SearchCollapseCallback, EndCallback = SearchEndCallback, }; SearchNextNode(); }
private void SearchNextNode() { if(_searchState == null) return; SearchWorker worker = new SearchWorker(_searchState); Thread t = new Thread(new ThreadStart(worker.Run)); t.IsBackground = true; t.Start(); _searchForm = new CancelSearchForm(); if(_searchForm.ShowDialog(this) == DialogResult.Cancel) { worker.Cancel(); _searchState = null; } t.Join(); }