我有一个Outlook加载项,其中包含一个Web浏览器控件,该控件是目前用户控件的一部分,我正在加载此加载项的网页onload。因此,它到目前为止工作正常,但是,当页面加载时间很长时,它会使UI无法继续工作。 所以,我的问题是,我可以从用户控件转移该Web浏览器控件,并创建一个具有此Web浏览器控件的单独线程,并在该线程中执行所有Web浏览器加载。这样,当控件花费时间加载时,用户可以继续他们的工作。
我在这篇文章中一直在阅读这种方法:WebBrowser Control in a new thread
但我正在努力将此重用于我的特定用例。有人可以用这种方法帮助我吗? 我也在这里发布了我的代码:
答案 0 :(得分:0)
我知道这不是太多,但你可以尝试这样的事情:
声明一个帖子:
Private ThreadBrowse As Threading.Thread
然后开始:
Private Sub StartNavigate
ThreadBrowse = New System.Threading.Thread(AddressOf TheWork)
ThreadBrowse.SetApartmentState(Threading.ApartmentState.STA)
ThreadBrowse.Start()
End Sub
这是线程将要执行的子操作:
Private Sub TheWork()
Dim IsFinish As Boolean = False
WebBrowser1.Navigate(New Uri("http://stackoverflow.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
答案 1 :(得分:0)
您是否尝试将网络浏览器代码放在单独的类中,然后调用代码?