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