Мое приложение WinForms подключается к работающему сервису через WCF и подписывается на события из сервиса. Когда происходит событие, мое приложение запрашивает текущие данные из службы и вызывает метод с именем UpdateDisplay (), чтобы заполнить DataGridView и отобразить его. Вид сетки остается пустым, и я пытаюсь его отладить. Но если я поставлю точку останова внутри UpdateDisplay (), в следующий раз, когда событие сработает, я получу тупик, потому что первый обработчик событий еще не завершен.
Я думал, что смогу отписаться от события в верхней части моего метода и повторно подписаться на него внизу, что-то вроде этого:
private static bool m_updatingDisplay = false;
private void UpdateDisplay()
{
// Unsubscribe from the event while the display is being updated. This should remove the problem of deadlocks while debugging because
// the event gets raised again.
m_callbackHandler.DatabaseUpdatedEvent -= m_callbackHandler_DatabaseUpdatedEvent;
DoSomethingThatTakesALongTime();
m_callbackHandler.DatabaseUpdatedEvent += m_callbackHandler_DatabaseUpdatedEvent;
}
Но я все еще получаю исключение.
Я думал только о том, чтобы обработчик событий просто установил флаг, а затем таймер проверял бы флаг каждую минуту или около того, и если это правда, тогда он будет обновлять и очищать флаг. Я думаю, что это сработало бы, но я чувствую, что это обычная проблема с общепризнанным решением, и я, наверное, должен знать, что это такое. Как лучше всего справиться с этой ситуацией?