C# Why is my lock statement hanging?

.net, c#, locking

Solution

Somehow, someone else holds a lock. You shouldn't use multicast delegate instances or events for locking, and you shouldn't use public members either, because you cannot control who is locking and when.

Therefore I'd use a separate locking object like this:

private readonly object controlNameChangedSync = new object();

event ControlNameChangeHandler IProcessBlock.OnControlNameChanged
{
  add
  {
    lock (controlNameChangedSync)
    {
      ControlNameChanged += value;
    }
  }
  remove
  {
    lock (controlNameChangedSync)
    {
      ControlNameChanged -= value;
    }
  }
}

Note: the reference to the event changes when doing a `+=` or `-=` on the delegate.

Problem

I have followed some tutorials on how to create custem event accessors. This is the code I have: ``` event ControlNameChangeHandler IProcessBlock.OnControlNameChanged { add { lock (ControlNameChanged) { ControlNameChanged += value; } } remove { lock (ControlNameChanged) { ControlNameChanged -= value; } } } ``` At the moment the code reaches `lock(ControlNameChanged)` in the add statament, nothing happens. The code doesn't run any further. However my application is still working. It doesn't freeze or something. What goes wrong?

Original source