Предположим, что вы присоединяетесь к событию, используя что-то похожее на:
public MyObject()
{
MyImageObject.Update += new UpdateEventHandler(ImageDataUpdated);
}
private void ImageDataUpdated(object sender, EventArgs e)
{
// do stuff
}
Вы можете отсоединиться от события в начале обработчика события, а затем использовать timer для повторного подключения через определенный промежуток времени. Это даст вам точный контроль над частотой обновления. Что-то вроде:
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);
}
При использовании этой стратегии есть хорошее изменение, заключающееся в том, что вы запрещаете базовому объекту изображения выполнять дополнительную работу, пока обработчик события отсоединен (конечно, это зависит от реализации объекта изображения). Скорее всего, вы сохраняете циклы процессора для собственной обработки изображений.