Непрерывно инициировать событие в решении KinectExplorer-WPF

Я новичок в программировании на C# и xaml. Я начал модифицировать решение KinectExplorer-WPF для Microsoft Kinect, чтобы сделать его полезным для моих целей. Я модифицирую окно Kinect, чтобы добавить новую панель, на которой я показываю последовательность изображений, представляющих некоторые положения, в которые может попасть человек, стоящий перед Kinect. Это код, который я добавил в KinectWindow.xaml:

<StackPanel Orientation="Vertical" Grid.Row="1" Grid.RowSpan="2" Margin="0,10" HorizontalAlignment="Center" Width="400" >
        <Grid Name="ExerciseViewerHost" Width="398" Height="645" Margin="0,0,0,0">
            <Grid Name="ExerciseVis" Background="{StaticResource DarkNeutralBrush}">
                <Viewbox Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center">
                    <Image Name="Exerc" CommandManager.Executed="Change_Position" Margin="5 5 5 5" />
                </Viewbox>
                <TextBlock x:Name="txtBox1" VerticalAlignment="Top" HorizontalAlignment="Center" FontSize="30" FontWeight="DemiBold"  Text="{Binding TextBox1Text, ElementName=root}" TextAlignment="Center" Margin="36,105,36,0" Height="45"  Width="328" />
            </Grid>
        </Grid>
    </StackPanel>

«Change_Position» — это событие, которое меняет изображение при достижении параметра (в частности, максимального значения счетчика), и оно определено в KinectWindow.xaml.cs как

private void Change_Position(object sender, EventArgs e)

и он запускается DispatcherTimer каждые 0 секунд в

DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(Change_Position); dispatcherTimer.Interval = new TimeSpan(0, 0, 0); dispatcherTimer.Start();

Код, который я описал, работает правильно, но мой вопрос очень прост... есть ли более "элегантный" способ запускать это событие постоянно (не с помощью таймера)? Есть ли у кого-нибудь части кода, которые могли бы поделиться со мной, чтобы решить мою проблему? Заранее спасибо!


person user3506770    schedule 07.04.2014    source источник


Ответы (1)


Вы можете использовать CompositionTarget.Rendering, которое запускается каждый раз, когда WPF визуализирует сцену. Не забудьте отключить обработчик событий, когда он вам не нужен, так как это может быть довольно дорого.

person Eli Arbel    schedule 07.04.2014