public static Scope SuspendEvents <T>(this BindingSource <T> bs, bool reset_bindings_on_resume, bool preserve_position) { var pos = bs.Position; return(Scope.Create( () => { // Notify pre-reset before any changes are made if (reset_bindings_on_resume) { bs.PreResetBindings(); } // Save the raise list changed events state var r = bs.RaiseListChangedEvents; bs.RaiseListChangedEvents = false; return r; }, r => { // Restore the raise events state bs.RaiseListChangedEvents = r; // Notify reset if (reset_bindings_on_resume) { bs.ResetBindings(false, preserve_position: false, include_pre_reset: false); } // Restore position if (preserve_position) { bs.Position = pos; } })); }