How to detect whether an EventWaitHandle is waiting?
- by AngryHacker
I have a fairly well multi-threaded winforms app that employs the EventWaitHandle in a number of places to synchronize access.
So I have code similar to this:
List<int> _revTypes;
EventWaitHandle _ewh = new EventWaitHandle(false, EventResetMode.ManualReset);
void StartBackgroundTask() {
_ewh.Reset();
Thread t = new Thread(new ThreadStart(LoadStuff));
t.Start();
}
void LoadStuff() {
_revTypes = WebServiceCall.GetRevTypes()
// ...bunch of other calls fetching data from all over the place
// using the same pattern
_ewh.Set();
}
List<int> RevTypes {
get {
_ewh.WaitOne();
return _revTypes;
}
}
Then I just call .RevTypes somewehre from the UI and it will return data to me when LoadStuff has finished executing.
All this works perfectly correctly, however RevTypes is just one property - there are actually several dozens of these. And one or several of these properties are holding up the UI from loading in a fast manner.
Short of placing benchmark code into each property, is there a way to see which property is holding the UI from loading? Is there a way to see whether the EventWaitHandle is forced to actually wait?