У меня есть довольно хорошее многопоточное приложение winforms, которое использует EventWaitHandle в нескольких местах для синхронизации доступа.
Итак, у меня есть код, подобный этому:
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;
}
}
Затем я просто вызываю .RevTypes
somewehre из пользовательского интерфейса, и он вернет мне данные, когда LoadStuff
завершит выполнение.
Все это работает совершенно правильно, однако RevTypes
- это всего лишь одно свойство - на самом деле их несколько десятков. И одно или несколько из этих свойств удерживают пользовательский интерфейс от быстрой загрузки.
Если не поместить код теста в каждое свойство, есть ли способ узнать, какое свойство удерживает пользовательский интерфейс от загрузки? Есть ли способ узнать, действительно ли EventWaitHandle вынужден ждать?