微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

网络采集工具的页面内容下载在进程中没错,而在线程的就不行了? 这个是取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 这样就可以执行了 __________________________________________________________________________

原文地址:https://www.jb51.cc/vb/263482.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐