Message queue for cross thread sync
Thread.MemoryBarrier()
What do you expect the call to Thread.MemoryBarrier() will help your code ?
What does Thread.MemoryBarrier do ? It prevents that the compiler and the hardware subtly transform a program’s memory operations.
So basically for your code it ensures that then following instructions will be executed in the order they are written.

var sync = new Control();
sync.Handle.GetHashCode(); // ensure handle is created
_sync = sync;  


Thread safety
To answer &quot;Is this code thread safe ?&quot;, you first need to set your definition of thread safety aka what does thread safety means for you. See also what-is-this-thing-you-call-thread-safe
General

the code is lacking a EndInvoke() which should be integrated.

you are misusing a Control to access the main (ui) thread of an application.

wouldn't a SynchronizationContext be a better fit here ?
See also: https://stackoverflow.com/a/20300351/2655508