2011-12-20 5 views
0

こんにちは、私はHtmlAgilityPackを使って、C#を使ってウェブからデータをスクラップしています。ここでは、コードは次のとおりです。C#テキストボックスに利用可能なデータを1つずつ表示する方法

private void button1_Click(object sender, EventArgs e) 
    { 
     var url = this.textBox1.Text; 
     var webGet = new HtmlWeb(); 
     var document = webGet.Load(url); 

     var metaTags = document.DocumentNode.SelectNodes("//meta"); 
     if (metaTags != null) 
     { 
      foreach (var tag in metaTags) 
      { 
       var name = tag.Attributes["name"].Value; 
       var content = tag.Attributes["content"].Value; 

       this.textBox2.Text = name + " : " + content; 
      } 
     } 
    } 

そのTextBox1テキストボックスからリンクを取得し、TextBox2をへの出力を示します。利用可能な最後のデータを表示します。私は利用可能なデータをまとめることができますが、すべてのデータを一度に表示します。実際には、他の人が処理されている間に利用可能なデータを1つ表示して、ユーザーが廃止の進行状況を認識できるようにしたいと思います。

+0

「textBox2」は最後の 'name:content'のみを表示しますが、一度に1つずつ遅延して表示したいのですか? – user807566

+0

はい。私はそれが欲しい – qmaruf

答えて

0

コードの前半部分が正しいとすれば、このになります。データは1つずつ表示されます。ほとんどの場合、foreachループが実行されすぎて、「1つ1つ」の効果に気づくことができません。

誰かが読めるように各結果を十分に表示する必要がある場合は、人為的な遅延を適用することができます。たぶんTimerか何か類似しているかもしれません。

代わりに、複数行のテキストボックス(たとえば、RichTextBox)を使用して、各行を改行することもできます。またはComboBox、多くの部屋を占有することはありません。これらのオプションを使用すると、上書きすることなくデータを保持できます。

+0

Thread.Sleep(1000);動かない 。 – qmaruf

+0

@qmaruf上書きしたくない場合は、 "this.textBox2.Text = name +": "+ content +" \ r \ n ";を使用して前のtextbox2データを上書きします。 'this.textBox2.Text = this.textBox2.Text + name +": "+ content;'。=を使用するたびに 'this.textBox2.Text'の値を再割り当てします。 また、 'Thread.Sleep()'の問題は何ですか? – user807566

0

ユーザーはタイマーコントロールを使用して、ループ内の次の値の表示を遅らせることができます。

これを行うには、BackgroundWorkerを使用することもできます。しかし、これはあなたのコードを複雑にします。 Beginners Guide to Threading in .NET: Part 5

また、指定したミリ秒間に実行を遅らせるThread.Sleep(xx)を使用することもできます。

Thread.Sleep(2000); 
    this.textBox2.Text += name + " : " + content + Environment.NewLine; 
+0

これを行う簡単な方法はありませんか? – qmaruf

+0

あなたが指定したミリ秒間現在のスレッドの実行を遅らせるthread.sleepを使用してください。 –

+0

Thread.Sleep(XX)は最終出力を遅延させているだけです。すべてのデータが同時に表示されています – qmaruf

関連する問題