Invoke fails silently when called on a Dispatcher that has not finished starting up yet. The call does not block and the operation is not executed in this case, but simply discarded. Unlike BeginInvoke, which returns a Status of Aborted in this case, there seems to be no way to discover this situation for Invoke calls.
This can happen in race conditions when an Invoke call is made very soon after a valid Dispatcher object has been obtained, but before its Dispatcher.Run loop is up and running on the target thread. Unfortunately, Dispatcher provides no flag to check for this condition, so if your code is affected by this race condition, you cannot (reliably) use Invoke. Instead, use a BeginInvoke call and wrap it in a do...while loop that repeats while the returned Status is Aborted.