0

「research」というボタンが押されたときに「howto*」と表示される可能性のある入力テキストボックスから読み取るプログラムがあります。

それは例えばグーグルから自動提案を引き出し始め、アスタリスクはアルファベットの各文字に置き換えられます。

私の質問は:

検索を停止するボタンが欲しいのですが。それが動いている間。

これを達成するための最良の方法は何でしょうか?

private void btnResearch_Click(object sender, RoutedEventArgs e)
        {            
            if (string.IsNullOrWhiteSpace(txtResearch.Text.Trim()))
            {
                MessageBox.Show("Please enter a search query", "Oops", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;              
            }
            //Robin: Temporal fix to the multi asterisk
            if (txtResearch.Text.Trim().Count(s => s == '*') > 1)
            {
                MessageBox.Show("Too many asterisk", "Oops", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;            
            }

            if (!ValidateLimitations())
            {
                return;
            }

            ((LongTailBot.MainWindow)App.Current.MainWindow).PlaySound("button_double_click.wav");

            this.chbSelAll.IsChecked = false;
            List<KeywordItem> keyList = new List<KeywordItem>();
            this.dgrResearch.ItemsSource = null;

            List<string> seetKeywords = SetupSeetKeywords(txtResearch.Text.Trim().Replace(" ", "%20"));
            if (seetKeywords.Count() < 1)
                return;

            foreach (string seetKey in seetKeywords)
            {
                this.txbResearch.Text = (seetKeywords.IndexOf(seetKey) + 1).ToString()
                    + "/" + seetKeywords.Count() + " " + seetKey.Replace("%20", " ");
                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                                      new Action(delegate { }));

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.GetRequestUriString(seetKey));
                request.Method = "GET";
                request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)";
                WebResponse response = request.GetResponse();

                if (((HttpWebResponse)response).StatusDescription.Trim().ToUpper() == "OK")
                {
                    using (Stream dataStream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(dataStream))
                        {
                            string responseFromServer = reader.ReadToEnd();

                            var keywordsFound = this.GetKeywordsFound(responseFromServer);
                            foreach (var key in keywordsFound)
                            {
                                keyList.RemoveAll(k => k.Keyword == key);                                                                
                                keyList.Add(new KeywordItem() { Checked = false, Keyword = key });

                                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                          new Action(delegate { }));                                
                            }

                        }
                    }
                    if (keyList.Count > 0)
                    {
                        dgrResearch.ItemsSource = null;
                        dgrResearch.ItemsSource = keyList;
                        dgrResearch.ScrollIntoView(dgrResearch.Items[dgrResearch.Items.Count - 1]);                        
                    }
                }

                response.Close();                
            }

            this.txbResearch.Text = this.dgrResearch.Items.Count.ToString() + " POPULAR PHRASES AVAILABLE!";            
            this.chbSelAll.IsChecked = dgrResearch.Items.Count > 0? true : false;
            ((LongTailBot.MainWindow)App.Current.MainWindow).PlaySound("abstractbtn.wav");
        }
4

1 に答える 1

1

BeginGetResponseメソッドを使用し、応答処理をCallbackパラメーターとして渡す必要があります。次に、[キャンセル]ボタンで、中止メソッドを呼び出します。

それを試しませんでしたが、それは一般的にはうまくいくはずです。

于 2012-05-25T18:44:34.987 に答える