Calling PushFrame on the same dispatcher from different threads just doesn't make sense, you didn't write what problem you are trying to solve but your PushFrame-based solution is probably wrong.
The Dispatcher object is responsible for executing code and dispatching event for a single thread, each thread has a queue of messages that are sent by the OS and include notifications for thing like mouse clicks, the dispatcher has a loop that reads this queue and calls the appropriate event.
Sometimes you have to process messages without returning from your method to the dispatcher loop, a good example for this is modal dialogs that respond to user input (so they need to process messages) without interrupting the control flow of the method that called them.
That what PushFrame does - it runs the dispatcher loop inside your code.
Each thread (optionally) has it's own message queue, the messages are specific to the windows and controls that belong to that thread, you can't process a thread's message queue from another thread (Windows itself doesn't have an API that let you read another thread's messages).
Calling PushFrame from another thread can't work because you're call happen on the wrong thread, PushFrame itself has to be called on the same thread manages by the dispatcher, you can't call it on another thread because that's trying to process a thread's messages on another thread.
Using Invoke or BeginInvoke also doesn't make sense here because the delegate passed to those methods is called only when the dispatcher is processing messages, if the dispather is already processing messages there's no need to call PushFrame to make it process messages.
If you ask another question describing what you are trying to do someone here may be able to help you, but calling Dispatcher.PushFrame from different threads is never going to work.