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?