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 フォームが 1 つ以上のスレッドを生成し、そのスレッドが Outlook アプリケーションを受信して​​アクセスする可能性があります (参照をロックした後)。スレッドが GUI を更新するために呼び出す Windows フォーム メソッドには、あなたが言及した InvokeRequired チェックがあります。これがマイクロソフトが推奨するアプローチであることを保証することはできませんが、私の場合、1 年以上エラーなしで機能していると言えます。

自分のやり方でやりたい場合は、次のようになると思います: if (f.InvokeRequired) ...

しかし、なぜそれが必要なのかわかりません

于 2013-05-10T19:10:42.557 に答える