Web浏览器控件单独线程 - VB.Net
我有一个Outlook加载项,其中包含一个Web浏览器控件,此时是用户控件的一部分,我正在加载此加载项的一个网页onload。所以,到目前为止,它工作正常,但是,当页面需要很长时间才能加载时,它使用户界面无法继续工作。 所以,我的问题确实是,我可以将该Web浏览器控件从用户控件中移出,并创建一个具有此Web浏览器控件的独立线程,并在该线程中加载所有Web浏览器。这样,当控制器花时间加载时,用户可以继续他们的工作。Web浏览器控件单独线程 - VB.Net
我一直在阅读有关在这个岗位这种做法:WebBrowser Control in a new thread
但我在努力重用此我特别的使用情况。有人可以帮助我采用这种方法吗? 我已经张贴在这里我的代码,以及:
我知道这是不是太多,但你可以尝试这样的事情:
声明线程:
Private ThreadBrowse As Threading.Thread
然后启动它:
Private Sub StartNavigate
ThreadBrowse = New System.Threading.Thread(AddressOf TheWork)
ThreadBrowse.SetApartmentState(Threading.ApartmentState.STA)
ThreadBrowse.Start()
End Sub
This是一个子线程就会做:
Private Sub TheWork()
Dim IsFinish As Boolean = False
WebBrowser1.Navigate(New Uri("http://*.com"))
Recheck:
WebBrowser1.InvokeCustom(Sub() IsFinish = (WebBrowser1.ReadyState = WebBrowserReadyState.Complete))
If IsFinish = False Then
Threading.Thread.Sleep(100)
GoTo Recheck
End If
End Sub
不要忘了把他的一个模块中:
<Runtime.CompilerServices.Extension()>
Public Sub InvokeCustom(ByVal Control As Control, ByVal Action As Action)
If Control.InvokeRequired Then Control.Invoke(New MethodInvoker(Sub() Action()), Nothing) Else Action.Invoke()
End Sub
也许你可以用这个基本的代码做的更好,体贴就像一个“启动” :D
我可以使用我现有的浏览器控件来做到这一点吗?我确实尝试过类似的东西,但是使用我现有的webbrowser控件(即在用户控件下)并不真正起作用。我猜我需要在线程中创建Web浏览器实例,然后始终在线程中运行Web浏览器控件。这会起作用吗? – Neophile
是的,您可以使用任何控件,只需用您的网页浏览器或您的控件替换“WebBrowser1”即可。 直接在线程中创建webbrowser ... mmh我必须说这有点复杂,不是不可能,但很复杂。我也遇到了这个问题,其他人控制是好的,但是对于webbrowser是......“奇怪”:D 无论如何测试这段代码并让我知道。 – Tyler
您原来的问题有一个很好的评论:“在问题中缺乏细节来帮助您”。重复这个问题,并显示更少的细节不是一个聪明的方式来使用这个网站。 –
您能否让我知道我错过了哪些信息?我非常乐意添加更多细节:)。实际上,我在其他帖子中添加了大部分代码。不知道还有什么更多的代码添加。 – Neophile