首页论坛

多线程的死链测试,个别线程链接测试超时,请帮我看看代码

投稿人:zengdddd

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. WebClient wc = new WebClient();
  4. string result = wc.DownloadString(textBox1.Text);
  5. Regex rx = new Regex(" <a\\s*[^ <>]*href\\s*=\\s*(\"?|\'?)(?'href'[^ <>\"\'\\s]*)(\"?|\'?)\\s*[^ <>]*>(?'text'((? <! </a>).)*) </a>", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);
  6. MatchCollection mc = rx.Matches(result);
  7. dataGridView1.Rows.Clear();
  8. progressBar1.Maximum = mc.Count;
  9. progressBar1.Value = 0;
  10. for (int i = 0; i < mc.Count; i++)
  11. {
  12. string href = mc[i].Groups["href"].Value;
  13. string name = mc[i].Groups["text"].Value;
  14. if (href.IndexOf("http") == -1)
  15. {
  16. href = textBox1.Text + ((href.IndexOf("/") == 0) ? href : ("/" + href));
  17. }
  18. DataGridViewTextBoxCell link_name = new DataGridViewTextBoxCell();
  19. link_name.Value = name;
  20. DataGridViewTextBoxCell link_href = new DataGridViewTextBoxCell();
  21. link_href.Value = href;
  22. DataGridViewRow row = new DataGridViewRow();
  23. row.Cells.Add(link_name);
  24. row.Cells.Add(link_href);
  25. dataGridView1.Rows.Add(row);
  26. }
  27. Thread t = new Thread(new ParameterizedThreadStart(startTest));
  28. t.Start(dataGridView1.Rows);
  29. }
  30. private void startTest(object rows)
  31. {
  32. foreach (DataGridViewRow r in (DataGridViewRowCollection)rows)
  33. {
  34. Thread t = new Thread(new ParameterizedThreadStart(testLinks));
  35. t.Start(r);
  36. }
  37. }
  38. delegate void progressBarCallBack();
  39. private int dlinks=0,llinks=0;
  40. private void testLinks(object link)
  41. {
  42. DataGridViewRow row = (DataGridViewRow)link;
  43. try
  44. {
  45. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(row.Cells[1].Value.ToString());
  46. req.Timeout = 10000;
  47. HttpWebResponse res = (HttpWebResponse)req.GetResponse();
  48. if (res.StatusCode == HttpStatusCode.OK)
  49. {
  50. row.Cells[2].Value = SEO.Resource1.yes;
  51. llinks += 1;
  52. }
  53. }
  54. catch(WebException ex)
  55. {
  56. row.Cells[2].Value = SEO.Resource1.no;
  57. dlinks += 1;
  58. }
  59. finally
  60. {
  61. if (progressBar1.InvokeRequired)
  62. {
  63. progressBarCallBack pCallBack = new progressBarCallBack(progressBar1.PerformStep);
  64. Invoke(pCallBack);
  65. }
  66. else
  67. {
  68. progressBar1.PerformStep();
  69. }
  70. if (progressBar1.Value == progressBar1.Maximum)
  71. {
  72. MessageBox.Show("链接状态检查完毕\n死链:" + dlinks + "条,正常链接:" + llinks + "条");
  73. }
  74. }
  75. }
不显示删除回复显示所有回复显示星级回复显示得分回复

最新评论
更多评论...