This is from MSDN: The lock keyword ensures that one thread does not enter a critical section of code while another thread is in the critical sectio
The critical section that it is talking about is the section guarded by the lock statements.
Any critical section that is locking on the same object will be blocked from getting access.
It is also important that your lock object be static, because the locks need to be locking (or trying to lock) on the same instance of the lock object.