/// <summary> /// The function launched in a seperate thread that will carry out the actual search/thinking. /// </summary> /// <param name="sender"> </param> /// <param name="e"> </param> private void FindMove(object sender, DoWorkEventArgs e) { ThreadParam param = (ThreadParam)e.Argument; Move move = m_openingBook.Query(param.MoveOrganizer); if (move == null) { move = m_searchTree.FindBestMove(param.MoveOrganizer, param.searchDepth, param.searchTime); } e.Result = move; m_waitHandle.Set(); }