2012-10-08 29 views
0

我有這個代碼是一個函數,它始終自我調用。 即時通訊使用backgroundworker和在後臺工作Dowork事件我第一次調用函數與按鈕單擊開始過程。如何在處理過程中實時總結鏈接的總數?

在這個函數中,我有兩個位置使用標籤12和標籤10的Text屬性。 標籤12呈現不良鏈接,標籤10呈現良好鏈接。 Bot正在實時工作,文本正在實時更改。

在這個函數中,我可以使用標籤3文本來總結標籤12 +標籤10和目前的鏈接總數?

像這樣:

this.Invoke(new MethodInvoker(delegate { label3.Text = label12 + label10 })); 

的問題是:

  1. 我怎麼辦label12和label10的總和所以LABEL3會出現一些中斷?

  2. 我應該在哪裏放置這個label3.Text行的函數?

這是代碼:

private List<string> test(string url, int levels,DoWorkEventArgs eve) 
     { 


      HtmlWeb hw = new HtmlWeb(); 
      List<string> webSites; 
      List<string> csFiles = new List<string>(); 

      csFiles.Add("temp string to know that something is happening in level = " + levels.ToString()); 
      csFiles.Add("current site name in this level is : " + url); 
      try 
      { 
       this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, "Loading The Url: " , Color.Red); })); 
       this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, url + "...",Color.Blue); })); 
       HtmlAgilityPack.HtmlDocument doc = TimeOut.getHtmlDocumentWebClient(url, false, "", 0, "", ""); 

       this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, " Done " + Environment.NewLine, Color.Red); })); 


        currentCrawlingSite.Add(url); 
        webSites = getLinks(doc); 
        removeDupes(webSites); 
        removeDuplicates(webSites, currentCrawlingSite); 
        removeDuplicates(webSites, sitesToCrawl); 
        if (removeExt == true) 
        { 
         removeExternals(webSites); 
        } 
        if (downLoadImages == true) 
        { 
         webContent.retrieveImages(url);     } 
        if (levels > 0) 
         sitesToCrawl.AddRange(webSites 
        this.Invoke(new MethodInvoker(delegate { label7.Text = sitesToCrawl.Count.ToString(); })); 
        this.Invoke(new MethodInvoker(delegate { label12.Text = currentCrawlingSite.Count.ToString(); })); 


        if (levels == 0) 
        { 
         return csFiles; 
        } 
        else 
        { 


for (int i = 0; i < webSites.Count(); i++)//&& i < 20; i++)       
         { 


          string t = webSites[i]; 
          if ((t.StartsWith("http://") == true) || (t.StartsWith("https://") == true)) // replace this with future FilterJunkLinks function 
          { 
           csFiles.AddRange(test(t, levels - 1, eve));         
          } 

         } 
         return csFiles; 
        } 



      } 
      catch 
      { 
       failedUrls++; 
       this.Invoke(new MethodInvoker(delegate { label10.Text = failedUrls.ToString(); })); 
       this.Invoke(new MethodInvoker(delegate { Texts(richTextBox1, " Failed " + Environment.NewLine, Color.Green); })); 
       return csFiles; 
      } 

     } 

回答

1

將一個字符串從Label轉換爲數字,使用以下命令:

int number = Int32.Parse(someLabel); 

所以,你的代碼應該是:

label3.Text = (Int32.Parse(label12.Text) + Int32.Parse(label10.Text)).ToString(); 
+0

MatthewRz label3中的結果是:第一個00th當一個標籤增加一個,所以它的10然後20然後30然後40然後50,60,70,80,90然後100然後當seocnd標籤增加一個它的101時,那麼第一個標籤再次增加一個它111然後112然後122 132 ...等等...總和一些工作不好。 –

+0

@DanielLip它​​應該工作,當label3是101時'label12'和'label10'的值是多少? – 3aw5TZetdf

+0

MatthewRz現在例如標籤13是141和label12顯示14和label10顯示1和label13應該顯示15而不是141 –