private void SearchFromXiaoelang(string keyword,
                                  SearchResult searchResult,
                                  HttpContentDownloader downloader,
                                  Uri searchUri)
 {
     downloader.DownloadPost(searchUri, "keyword", keyword,
                             ar =>
                             {
                                 try
                                 {
                                     //At this step, we can get the index page in the search engine 
                                     var state = (RequestState)ar.AsyncState;
                                     state.stopTimer = true;
                                     var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                                     response.GetResponseStream();
                                     var parser = new XiaoelangSearchResultPageParser();
                                     SearchBookResult =
                                         parser.Parse(response.GetResponseStream(), searchResult) as List<SearchResult>;
                                 }
                                 catch (WebException e)
                                 {
                                     if (e.Status == WebExceptionStatus.RequestCanceled)
                                         throw new TimeoutException("连接xiaoelang.com超时,请尝试更换搜书引擎");
                                 }
                             });
 }