public void Search(SearchRun searchRun) { try { WordSemanticBranch lnk = null; if (!searchRun.ForceSearch) { lnk = m_SemanticHelper.GetSemanticLinkFromDB(searchRun.WordLink.ParentWord.Word); if (lnk != null) { if (lnk.ParentWord.Status == WordStatus.eNotProcessed) { lnk = null; } } } if (lnk == null) { m_SemanticHelper.UpdateWordStatus(searchRun.WordLink.ParentWord, WordStatus.eInProgress); OnExplProcessed(new ExplProcessedEventArgs(searchRun, false)); GetSemanticLink(searchRun); } else { //searchRun.WordLink = lnk; } //m_SemanticHelper.UpdateWordStatus(curRun.WordLink.ParentWord, WordStatus.eNotProcessed);//WordStatus.eInProgress); //OnExplProcessed(new ExplProcessedEventArgs(curRun, false)); //searchRun.WordLink = //GetSemanticLink(searchRun); //WordSemanticLink link = GetSemanticLink(searchRun); //if (!m_ListLinks.Keys.Contains(searchRun.WordToSearch)) //{ // m_ListLinks.Add(link.ParentWord.Word, link); // OnExplProcessed(new ExplProcessedEventArgs(searchRun, true)); //} int nNewDeepSearch = searchRun.DeepSearch - 1; foreach (WordLink aLink in searchRun.WordLink.Children) { if (aLink.RelationType == WordLinkType.eNormal || aLink.RelationType == WordLinkType.eTentative) { WordSemanticBranch childLink = m_SemanticHelper.GetSemanticLinkFromDB(aLink.Child.Word); if (childLink == null) { m_SemanticHelper.UpdateWordStatus(aLink.Child, WordStatus.eNotProcessed); childLink = new WordSemanticBranch(); childLink.ParentWord = aLink.Child; m_SemanticHelper.AddDictionaryWord(childLink); } OnExplProcessed(new ExplProcessedEventArgs(new SearchRun(childLink, 0, false, 0), true)); ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartSearch), new SearchRun(childLink, searchRun.DeepSearch - 1, searchRun.ForceSearch, searchRun.CurDeep + 1)); } } } catch (Exception ex) { MessageBox.Show(string.Format("{0}\n{1}", "CLientLogic.Search", ex.Message)); } }