0

在我的 Outlook 2013 VSTO 插件中,我有以下代码:

Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
    Task.Run(Sub() DoStuff())
End Sub

Private Sub DoStuff()
    ' Do some long task stuff
    Call StuffDone() 
End Sub

Private Sub StuffDone()
    If ????.InvokeRequired Then
        ????.Invoke(New MethodInvoker(AddressOf StuffDone))
        Exit Sub
    End If

    Dim f As New Form1
    f.Show()
End Sub

但我不知道如何调用 InvokeRequired 因为没有主窗体??

谢谢

4

1 回答 1

0

为什么你觉得你需要调用 InvokeRequired?

在我的情况下,我正在做的是在 VSTO 项目中包含一个 Windows 窗体。我将 Outlook 应用程序引用从加载项传递到 Windows 窗体,然后我的 Windows 窗体可能会生成一个或多个线程,这些线程也可能接收和访问 Outlook 应用程序(在锁定引用之后)。线程调用以更新 GUI 的 Windows 窗体方法具有您提到的 InvokeRequired 检查。我不能保证这是微软推荐的方法,但我可以说它已经为我工作了一年多没有错误。

如果您更喜欢按照自己的方式进行操作,我认为是: if (f.InvokeRequired) ...

但我不知道为什么这是必要的

于 2013-05-10T19:10:42.557 回答