1
2 string htmlstr = string.Empty;
3 [STAThread]
4 public string GetHtmlByWeb(string url)
5 {
6 try
7 {
8
9 RunWithSingleThread(url);
10 DateTime dtime = DateTime.Now;
11 double timespan = 0;
12 //等待 页面加载完毕 并获取到参数
13 while (string.IsNullOrWhiteSpace(htmlstr) && timespan < 10)
14 {
15 DateTime time2 = DateTime.Now;
16 timespan = (time2 - dtime).TotalSeconds;
17 }
18 // double lo = DateTime.Now.Subtract(dtime).TotalSeconds;
19 }
20 catch (Exception)
21 {
22
23 }
24 finally
25 {
26 if (t != null && t.ThreadState == ThreadState.Running)
27 {
28 t.Abort();
29 }
30 }
31
32 return htmlstr;
33 }
34
35
36 //线程
37 private Thread t;
38 //异步执行WebBrowser
39 public void RunWithSingleThread(object url)
40 {
41 ParameterizedThreadStart ps = new ParameterizedThreadStart(GetHtmlWithBrowser);
42 t = new Thread(ps);
43 t.IsBackground = true;
44 t.ApartmentState = ApartmentState.STA;
45 t.Start(url);
46 }
47
48 private WebBrowser wb;
49 private void GetHtmlWithBrowser(object url)
50 {
51 htmlstr = string.Empty;
52
53 wb = new WebBrowser();
54 wb.ScriptErrorsSuppressed = true; //防止脚本异常跳出弹窗
55 wb.ScrollBarsEnabled = true;
56 wb.Navigate(url.ToString());
57
58 wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
59 while (wb.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
60 {
61 System.Windows.Forms.Application.DoEvents(); //避免假死,若去掉则可能无法触发 DocumentCompleted 事件。
62 }
63
64 }
65 //获取内容
66 public void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
67 {
68 htmlstr = wb.Document.Body.InnerHtml;
69
70 }