Suppose you are joining an event using something similar to:
public MyObject() { MyImageObject.Update += new UpdateEventHandler(ImageDataUpdated); } private void ImageDataUpdated(object sender, EventArgs e) {
You can disconnect from the event at the beginning of the event handler, and then use the timer to reattach after a certain time interval. This will give you some precise control of the refresh rate. Sort of:
public MyObject() { MyTimer = new System.Timers.Timer(100); // 10 Hz MyTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); MyTimer.Enabled = true; } private void ImageDataUpdated(object sender, EventArgs e) { // detach from the event to keep it from fireing until the timer event has fired. MyImageObject.Update -= new UpdateEventHandler(ImageDataUpdated); // do stuff } private static void OnTimedEvent(object source, ElapsedEventArgs e) { // (re-)attach to the event handler. MyImageObject.Update += new UpdateEventHandler(ImageDataUpdated); }
Using this strategy, there are good changes that you prevent the main image object from doing additional work while the event handler is disconnected (of course, this depends on the implementation of the image object). Most likely, you save CPU cycles for your own image processing.
source share