Tengo un formulario de InfoPath que necesito deshabilitar condicionalmente sus eventos OnChange. Como no es posible vincular los controladores de eventos una vez que se haya cargado el formulario, me veo obligado a confiar en un contador global que indica si se debe ejecutar un evento OnChange. Dentro de cada evento OnChange, compruebo si SuppressEventsCount == 0 antes de realizar cualquier acción. Para suprimir eventos durante la ejecución de alguna función u otra, simplemente configuro SuppressEventsCount ++, y nuevamente cuando la función sale. El mayor problema al hacer esto es que no es una excepción segura. Así que tuve la brillante idea de envolver los SuppressEvents contador en una clase que implementa IDisposableImplementación de RAII en C#
using(SuppressEvents s = new SuppressEvents()){
// OnChange events fired here are ignored
} // OnChange events enabled again
Esto funciona, pero todavía no es tan ideal como C++ solución que no requiere el uso de la "usando" directiva en absoluto.
¿Hay alguna manera a cualquiera:
- Gatillo un destructor o alguna función del momento en que un objeto sale del ámbito, O
- Evitar que los SuppressEvents objeto de ser inicializado fuera de un "uso" directiva enteramente
Consulte esta pregunta: http://stackoverflow.com/q/2101524/6345 (¿Es abusivo utilizar IDisposable y "usar" como medio para obtener "comportamiento de alcance" para la seguridad de excepciones?) –