Implementing RAII in C #

Tenho um formulário do InfoPath que preciso desativar condicionalmente os eventos do OnChange. Como não é possível vincular os manipuladores de eventos após o carregamento do formulário, sou obrigado a confiar em um contador global que indica se um evento OnChange deve ser executado. Dentro de cada evento do OnChange, verifico se SuppressEventsCount == 0 antes de executar qualquer ação. Para suprimir eventos durante a execução de uma função ou de outra, simplesmente defino SuppressEventsCount ++ e - novamente quando a função sai. O maior problema ao fazer isso é que não é seguro para exceções. Então, tive a brilhante idéia de agrupar o contador SuppressEvents em uma classe que implementa iDisposable

using(SuppressEvents s = new SuppressEvents()){
   // OnChange events fired here are ignored
} // OnChange events enabled again

Isso está funcionando, mas ainda não é tão ideal quanto uma solução c ++ que não requer o uso da diretiva "using"

Existe alguma maneira de:

Acione um destruidor ou alguma função no momento em que um objeto estiver fora do escopo, OU Evite que o objeto SuppressEvents seja inicializado fora de uma diretiva "using" inteiramente

questionAnswers(8)

yourAnswerToTheQuestion