[VB.NET]网络采集工具的页面内容下载在进程中没错,而在线程的就不行了?

来源:互联网 发布:大智慧行情数据接口 编辑:程序博客网 时间:2024/04/27 01:04
VB.NET源码-156个实用实例哦……<script type="text/javascript"><!--google_ad_client = "pub-8333940862668978";/* 728x90, 创建于 08-11-30 */google_ad_slot = "4485230109";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
网络采集工具的页面内容下载在进程中没错,而在线程的就不行了?
这个是取URL源文件的类:
Public Class HtmlSource
Private WithEvents WebBrowser As WebBrowser
Private Document_Type As String =
Public Html_Content As String =


Public Function WebBrowserUrl(ByVal Url As Uri, ByVal Web_Type As String) As Boolean
Try
HtmlCode.Substring(Me.HtmlCode.IndexOf( > ), Me.HtmlCode.IndexOf( < ) - Me.HtmlCode.IndexOf( > ))
Dim Falg As Boolean = True
Document_Type = Web_Type
WebBrowser = New WebBrowser
WebBrowser.ScriptErrorsSuppressed = True
WebBrowser.Navigate(Url)
For i As Integer = 0 To 500
If Html_Content <> Then
Return True
Falg = False
Exit For
End If
System.Threading.Thread.Sleep(1000)
System.Threading.Thread.SpinWait(1000)
Windows.Forms.Application.DoEvents()
Next
If Falg = True Then Return False
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function

Private Sub WebBrowser_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser.DocumentCompleted
Try
If WebBrowser.IsBusy = False Then
Select Case Document_Type
Case All
Html_Content = WebBrowser.Document.GetElementsByTagName( html ).Item(0).OuterHtml
Case Title
Html_Content = WebBrowser.Document.Title.ToString
Case Body
Html_Content = WebBrowser.Document.Body.OuterHtml
Case Links
If WebBrowser.Document.Links.Count > 0 Then
For i As Integer = 0 To WebBrowser.Document.Links.Count - 1
If i = 0 Then
Html_Content = WebBrowser.Document.Links.Item(i).OuterHtml.Replace(vbCrLf, )
Else
Html_Content = Html_Content & vbCrLf & WebBrowser.Document.Links.Item(i).OuterHtml.Replace(vbCrLf, )
End If
Next
Else
Html_Content =
End If
Case Urls
If WebBrowser.Document.Links.Count > 0 Then
For i As Integer = 0 To WebBrowser.Document.Links.Count - 1
If i = 0 Then
Html_Content = WebBrowser.Document.Links.Item(i).GetAttribute( href ).Trim.ToString.Replace(vbCrLf, )
Else
Html_Content = Html_Content & vbCrLf & WebBrowser.Document.Links.Item(i).GetAttribute( href ).Trim.ToString.Replace(vbCrLf, )
End If
Next
Else
Html_Content =
End If
Case Else
Html_Content = WebBrowser.Document.GetElementsByTagName( html ).Item(0).OuterHtml
End Select
Else
Html_Content =
End If
Catch ex As Exception
Html_Content =
End Try
End Sub

End Class

通过线程掉用该类会出现以下错误提示:当前线程不在单线程单元中,因此无法实例化ActiveX控件“8856f961-340a-11d0-a96b-00c04fd705a2”
__________________________________________________________________________
up
__________________________________________________________________________
是线程的问题
__________________________________________________________________________
是什么问题呀!!能告诉我吗!!
__________________________________________________________________________
看代码似乎没啥问题啊 怪
__________________________________________________________________________
ActiveX对象必须在设置为STA模式的单线程中.
如果是你自己写一段多线程序代码 就可以在线程执行之前设置其线程模型为STA
这样就可以执行了
__________________________________________________________________________
原创粉丝点击