My scenario:

* a few `BackgroundWorkers` to perform various functions.
* one of them, and only once, will have to execute to do a special work first before continue and letting other works to do their job.

I'm using `Monitor.TryEnter`: do this special work when it's true (locking is successful); when it's false, will wait for the lock to be released.

Problem is that this special work is done asynchronously. I have a listener, and the `CompletedSpecialWork` method will be called, but the Thread is different from the Thread where `Monitor.TryEnter` was performed (that is, the Thread holding(locking) the object). I need a way to be able to send a message to the original Thread asking to release the object.

I tried to have a static object of `SynchronizationContext`, but when I do `threadHoldingLock = SynchronizationContext.Current` it is null (it is being called from the BackgroundWorker that was able to hold the lock).

My question is: from this `CompletedSpecialWork` context/thread, how can I send a request to the original thread (holding the lock) to release the lock via `Monitor.Exit`? I need like a way to send a Invoke to the original thread with Monitor.Exit on it.