我尝试移动Kinect电机时应用程序冻结

时间:2014-12-11 16:53:27

标签: c# wpf kinect

我正在试图移动我的Kinect马达。它看起来很简单,但它不起作用,我的应用程序被冻结。我正在使用Visual Studio 2013和WPF,这是我的代码:

代码背后:

    private void MotorSliderValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        Angle.Content = (int)MotorSlider.Value;
    }

    private void ButtonClick(object sender, RoutedEventArgs e)
    {
        sensor.ElevationAngle = (int)Angle.Content;
    }

XAML:

<Slider x:Name="MotorSlider" HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" Grid.Row="2" VerticalAlignment="Top" Width="262" Maximum="27" SmallChange="1" Minimum="-27" ValueChanged="MotorSliderValueChanged"/>
<Label x:Name="Angle" Content="0" HorizontalAlignment="Left" Height="32" Margin="277,10,0,0" Grid.Row="2" VerticalAlignment="Top" Width="43" FontSize="18"/>
<Button Content="Change angle" HorizontalAlignment="Left" Height="32" Margin="336,10,0,0" Grid.Row="2" VerticalAlignment="Top" Width="102" Click="ButtonClick"/>

任何线索为什么它会被冻结?,它会导致System.InvalidOperationException:此API已从HRESULT返回异常:0x8007000D

谢谢。

1 个答案:

答案 0 :(得分:1)

这可能是因为电动倾斜移动太快(即设置ElevationAngle属性太快)。

根据官方documentation

  

连续15次后必须至少休息20秒   变化。如果您的应用超出这些限制,倾斜电机可能会   经历锁定期间,在此期间尝试设置高程   角度将导致错误代码

这也在同一页的“社区增加”部分中得到确认:

  

如果超出倾斜马达限制且运行时已锁定   倾斜电机让它休息,试图访问这个属性   导致在倾斜马达期间抛出 InvalidOperationException   锁定期。

为了解决这个问题,我在Microsoft的一个示例中看到了(我不记得哪个样本),在更改ElevationAngle属性后,他们明确地避免了此属性的任何其他更改,持续时间为1 ,35秒。

此外,如果您在Kinect传感器未运行时尝试更改ElevationAngle属性,则可以获得InvalidOperationException。从上述相同的页面:

  

如果在Kinect传感器访问时访问ElevationAngle属性   没有运行(即,尚未调用Start方法),a   将抛出InvalidOperationException。