Задать вопрос
@Egolds
.NET Разработчик

C# Timer — Анимация. Как уменьшить нагрузку на ЦП?

Делаю библиотеку с дизайном для разработчиков c#.
Для анимации контролов использую Timer с интервалом 10. То есть идет перерисовка (Invalidate) каждые 10мс. На каждый контрол, для каждого вида анимации свой таймер.

Что получается:
https://www.youtube.com/watch?v=8MV4YgceO2Q

5a2709dd1bba6967639165.png

Инициализирую AnimateTimer AT1 = new AnimateTimer();
Ну и потом уже даю функцию со своими условиями для таймера через SetFunction.

Проблема в том что, чем больше контролов - тем больше нагрузка на ЦП. Какую альтернативу можно использовать?
  • Вопрос задан
  • 757 просмотров
Подписаться 2 Средний 5 комментариев
Решения вопроса 1
@Egolds Автор вопроса
.NET Разработчик
Переделал класс полностью, теперь при запуске формы включается поток, который проверяет все запросы для выполнения анимации в List и собственно выполняет заданную функцию. А уже каждый контрол добавляет в лист запрос на анимацию со своей функцией.

Теперь работает и не нагружает ЦП.
https://www.youtube.com/watch?v=mmfQ_drvhPo

Спасибо VoidVolker.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
Выбрана неправильная архитектура. Судя по всему в таймерах же и осуществляется анимация? Так не делается. Почитайте про внутреннее устройство игр и игровых рендеров. Обычно заводится какой-то один таймер, который с определенной периодичностью запускается, при этом он помнит предыдущее время своего запуска и знает период. На этот таймер вешаются функции, которые при вызове получают текущее время и меняют значения переменных по определенным формулам (и чем проще формула - тем лучше) - и более ничего не делают. Непосредственно перерисовка элемента осуществляется в перезаписанном методе OnPaint - если там какая-то нестандартная отрисовка.
Ответ написан
profesor08
@profesor08
А ты покажи те функции, которые занимаются отрисовкой. То, что ты привет тут в коде, это ничего не говорит.
Ответ написан
@AlexSku
не буду отвечать из-за модератора
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы