VB.NET 后台工作者检查 TargetInvocationException 形式的适当性

VB.NET Background Worker check propriety of the form TargetInvocationException

我正在开发一个应该从网站上找到一些图像的 url 并应该下载它们的程序,我已经编写了解析代码和下载代码,并且它可以工作,但是因为我注意到它真的很慢我想如果我让它与表单异步工作会更好,所以我创建了 2 个后台工作人员:

1) 解析器

2) 下载器

当解析器启动时,下载器也会启动,解析器应该将 url 添加到列表框中,下载器应该下载它们并从列表中删除,我认为管理它不会有问题,我的真正的问题是...我从未使用过后台工作人员...

解析器应该在 Webbrowser 中加载页面,而不是解析图像,但是当我在 Webbrowser 上调用函数导航时...它不再给我 TargetInvocationException。

我在网上搜索了一下,据我所见,后台工作人员似乎无法直接访问GUI控件的属性和方法,据我所知应该使用Invoke,所以我创建了一个函数来做所有的工作,它通过这样做检查浏览器是在另一个线程中还是在这个线程中:

Sub parse(ByVal url As String)
  If wb.InvokeRequired Then 'wb is the Webbrowser
    wb.Invoke(New Action(AddressOf prova))
    Return
  End If
  'Navigate to the url, wait for browser to complete loading then do the parsing
End Sub

现在我的问题有两个:

1)invokerequired propriety 值是 false 即使我从 worker 调用方法,所以调用没有被调用,它仍然给我同样的异常

2) 如果我调用 invoke,我应该在 GUI 线程中强制该方法为 运行,对吗? 如果是这样......它不应该像以前一样减慢我的程序吗?

我一个人做的,问题是我在运行时创建组件,所以我应该为组件创建句柄,创建组件后做这样的事情就足够了:

If Not wb.IsHandleCreated Then
  Dim handle As IntPtr = wb.Handle
End If

变量 handle 没有用,但是调用组件的 handle 属性会强制组件创建 handle,这就是我进行该分配的原因。