Вчера я дал ответ на вопрос Как вы управляете запуском событий в C #? , который, короче говоря, задает следующее:
"Естьсобытие, которое срабатывает при получении нового кадра с камеры. Однако это происходит чаще, чем мне бы хотелось ... Как я могу контролировать, когда происходит событие? "
В своем ответе я предоставил код ниже, и этим утром я обнаружил, что у меня было 2 отрицательных отзыва без каких-либо комментариев.Меня беспокоит не потеря репутации, а логика, которую я использую в различных приложениях, и то, что отрицательные отзывы могут указывать на то, что мои реализации являются плохой практикой или ухудшают производительность.Таким образом, я прошу этот вопрос уточнить, если что-то не так с подключением / отключением контроллеров событий таким образом?
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 firing 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);
}
Кроме того, я написал следующее, ссылаясь на то, что можно проверить, если выиметь каких-либо подписчиков до фактической подготовки данных для отправки подписчику.И в некоторых случаях это может привести к снижению загрузки процессора.Мне это кажется правильным (опять же, я делаю это сам), но что-то не так с этим утверждением?
Используя эту стратегию, есть большая вероятность, что вы мешаете базовому объекту изображения выполнять дополнительную работу, пока обработчик события отсоединен (конечно, это зависит от реализации объекта изображения).Скорее всего, вы сохраняете циклы процессора для собственной обработки изображений.