私のOutlook 2013 VSTO AddInでは、私はこのコードを持っています:
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を呼び出す方法を知っていないので、メインフォームはありませんか?
ありがとう
回答:
回答№1は0なぜあなたはInvokeRequiredを呼び出す必要があると思いますか?
私が私の場合にしているのは、WindowsVSTOプロジェクトのフォーム。私はOutlookアプリケーションリファレンスをアドインからWindowsフォームに渡します。そして、Windowsフォームは、(参照をロックした後に)Outlookアプリケーションを受信してアクセスすることがある1つ以上のスレッドを生成することがあります。 GUIを更新するためにスレッドが呼び出すWindows Formメソッドは、あなたが言及したInvokeRequiredチェックを持っています。私はこれがマイクロソフトが推奨するアプローチであることを保証することはできませんが、私のケースでは1年間以上エラーフリーで働いていると言えるでしょう。
あなたがそれをあなたのやり方で行うことを好むなら、私はそれがそうであると思う: if(f.InvokeRequired)...
しかし、なぜそれが必要なのかわからない