private static void RestartTimerForBuffer(ITextBuffer buffer) { DispatcherTimer timer; if (BufferIdleEventUtil.TryGetBufferTimer(buffer, out timer)) { timer.Stop(); } else { timer = new DispatcherTimer(DispatcherPriority.ApplicationIdle) { Interval = TimeSpan.FromMilliseconds(500.0) }; timer.Tick += (EventHandler)((s, e) => { BufferIdleEventUtil.ClearBufferTimer(buffer); HashSet <EventHandler> listeners; if (!BufferIdleEventUtil.TryGetBufferListeners(buffer, out listeners)) { return; } foreach (EventHandler eventHandler in listeners) { eventHandler((object)buffer, new EventArgs()); } }); buffer.Properties[BufferIdleEventUtil.bufferTimerKey] = (object)timer; } timer.Start(); }
private static void DisconnectFromBuffer(ITextBuffer buffer) { buffer.Changed -= new EventHandler <TextContentChangedEventArgs>(BufferIdleEventUtil.BufferChanged); BufferIdleEventUtil.ClearBufferListeners(buffer); BufferIdleEventUtil.ClearBufferTimer(buffer); buffer.Properties.RemoveProperty(BufferIdleEventUtil.bufferListenersKey); }