Using Monitor.TryEnter instead of lock

A deadlock is happening in the Signal application when using a high
frequency and clicking stop. Instead of a deadlock, use Monitor.TryEnter
to wait for the lock with a timeout, and throwing an exception if the
lock was not acquired.

I'd rather the application die than be deadlocked.