Why do you feel you need to call InvokeRequired?
What I'm doing in my case is to include a Windows Form in the VSTO project. I pass the Outlook Application reference from the Add-in to the Windows Form and then my Windows form may spawn one or more threads that may also receive and access the Outlook Application (after locking on the reference). The Windows Form methods that the threads call to update the GUI have the InvokeRequired check that you mentioned. I can't guarantee this is the Microsoft recommended approach but I can say its been working for me error-free for over a year in my case.
If you prefer to do it your way I think it would be: if (f.InvokeRequired) ...
but I'm not sure why that's necessary