Simple dispatcher implementation
Because the task within the Dispatcher is a long running task, you should use the option TaskCreationOptions.LongRunning. Otherwise the operation blocks a thread-pool thread that is usually used for short operations. Alternatively you could also use a Thread.
Instead of using the blocking collection for returning the result, you could use a TaskCompletionSource. That would change the return value of the method Invoke to Task&lt;T&gt;. Therfore the calling code could use the async/await-pattern.
Consider to throw an exception if the Dispatcher was stopped and Invoke is called. Otherwise the call blocks forever, right?