我正在尝试移动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

谢谢。

最佳答案

这可能是由于电动倾斜速度太快导致的结果(即,将ElevationAngle属性设置得太快)。

根据官方documentation


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


在同一页面的“社区添加”部分中也确认了这一点:


  如果超出了倾斜电机的限制并且运行时已锁定
  倾斜马达使其静止,尝试访问此属性
  导致在倾斜电机期间引发InvalidOperationException
  锁定期。


为了解决此问题,我从Microsoft的一个示例(我不记得哪个示例)中看到,更改ElevationAngle属性后,他们在1.35秒钟内明确避免对此属性进行任何其他更改。

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


  如果在Kinect传感器处于打开状态时访问了ElevationAngle属性
  未运行(即尚未调用Start方法),
  InvalidOperationException将被抛出。

关于c# - 当我尝试移动Kinect电机时应用程序卡住,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27428226/

10-11 21:36