2011-12-20 61 views
0

您好我正在使用HtmlAgilityPack從Web上使用c#中的一些數據。這裏是代碼:C#如何在文本框中逐個顯示可用數據

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; 
      } 
     } 
    } 

它從文本框1獲取鏈接並顯示輸出到文本框2。它顯示最後可用的數據。我可以拼接可用數據,但它會一次顯示所有數據。其實我想顯示一個數據,當其他人正在處理,以便用戶可以實現報廢進度。有誰可以請幫忙?

+0

你的意思是'textBox2'只顯示最後一個'name:content',但是你想一次一個地顯示它們一個延遲? – user807566 2011-12-20 16:37:41

+0

是的。我想要 – qmaruf 2011-12-20 16:45:30

回答

0

假設你的代碼的前半部分是正確的,這個顯示數據一個接一個。很可能,foreach循環執行得太快,您無法注意到「一個一個」的效果。

如果您需要將每個結果顯示足夠長以供某人閱讀,則可以應用人爲延遲。也許與Timer或類似的東西。

另一種方法是使用多行文本框(例如RichTextBox)並將每個結果放在新行上。或者一個ComboBox,這將不佔用更多的空間。這些選項允許您保存數據,而不必覆蓋它。

+0

Thread.Sleep(1000);不管用 。當我使用「this.textBox2.Text = name +」:「+ content +」\ r \ n「;它覆蓋了以前的textbox2數據,這不是我想要的。 – qmaruf 2011-12-20 16:58:58

+0

@qmaruf如果你不想覆蓋,你將不得不使用'this.textBox2.Text = this.textBox2.Text + name +「:」+ content;'你每次使用'='符號重新分配'this.textBox2.Text'的值。 此外,Thread.Sleep()有什麼問題? – user807566 2011-12-20 18:24:47

0

您可以使用Timer控件來延遲循環中下一個值的顯示。

您也可以使用BackgroundWorker來完成此操作。但是這會增加代碼的複雜性。請看看Beginners Guide to Threading in .NET: Part 5

或者你可以使用Thread.Sleep(xx),它會延遲你指定的毫秒執行。

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

沒有任何簡單的方法可以做到這一點?? – qmaruf 2011-12-20 17:14:12

+0

使用thread.sleep會導致當前線程的執行延遲幾毫秒。檢查更新後的答案 – 2011-12-20 17:56:55

+0

Thread.sleep(XX)只是延遲了最終輸出,所有數據一次顯示在一起。 – qmaruf 2011-12-21 10:33:59

相關問題