WPf анимация с WinMM - PullRequest
       6

WPf анимация с WinMM

0 голосов
/ 11 января 2011

Я хотел бы получить информацию об анимации в WPF

, поскольку мне нужен действительно точный рендеринг, я решил использовать мультимедийный таймер вместо таймера анимации по умолчанию ...

Итак, я хотел бы знать, как работают часы анимации ... я думал о том, чтобы вызывать событие тика каждые 2 мс и вызывать диспетчерский вызов (я не уверен, что интервал 2 мс достаточен для перемещения строки, но если мой понимание хорошее, диспетчер справится, нет?!?

public void setTime(int TimeInMs)
        {
         AnimatedLine.Dispatcher.Invoke(
         System.Windows.Threading.DispatcherPriority.Normal,
         new Action(
           delegate()
           {
               AnimatedLine.X1 = TimeInMs / 10 * ZoomRatio;
               AnimatedLine.X2 = TimeInMs / 10 * ZoomRatio;
           }
       ));

это лучший способ сделать это?

Кроме того, я хотел бы знать, как вы можете тестировать некоторые коллекции каждые 2 мс ...

На данный момент я действительно считаю, что невозможно зацикливать коллекцию каждые 2 мс (например, 100 объектов), поэтому я решил использовать словарь ... (используя ключ в качестве эталона времени ...), если есть лучший вариант я буду рад услышать ...

1 Ответ

2 голосов
/ 11 января 2011

Не делай этого. Если основной поток не справляется с модификацией + повторной визуализацией ваших визуалов, Actions будет складываться в Dispatcher до тех пор, пока что-то действительно не случится.

Вместо этого взгляните на CompositionTarget.Rendering . По сути, это событие вызывается один раз за кадр, поэтому вы можете анимировать в нем свои объекты перед рендерингом.

Конечно, здесь нет понятия частота кадров , и вы не можете предсказать, через какой интервал будет происходить это событие. Поэтому рассмотрите возможность анимации на основе времени, прошедшего с последнего кадра.

В любом случае, это хорошая анимационная практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...