У меня есть форма InfoPath, в которой мне нужно условно отключить события OnChange.Поскольку невозможно связать обработчики событий после загрузки формы, я вынужден полагаться на глобальный счетчик, который указывает, должно ли выполняться событие OnChange. Внутри каждого события OnChange я проверяю, имеет ли значение SuppressEventsCount == 0 перед выполнением каких-либо действий. Чтобы подавить события во время выполнения той или иной функции, я просто устанавливаю SuppressEventsCount++, и -- снова при выходе из функции. Самая большая проблема с этим заключается в том, что это не безопасно для исключений. Так что у меня возникла блестящая идея обернуть счетчик SuppressEvents в класс, который реализует iDisposable
using(SuppressEvents s = new SuppressEvents()){
// OnChange events fired here are ignored
} // OnChange events enabled again
. Это работает, но все же не так идеально, как решение на C++, которое вообще не требует использования директивы «using».
Есть ли какой-нибудь способ: