我正在试图移动我的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
谢谢。
答案 0 :(得分:1)
这可能是因为电动倾斜移动太快(即设置ElevationAngle
属性太快)。
根据官方documentation:
连续15次后必须至少休息20秒 变化。如果您的应用超出这些限制,倾斜电机可能会 经历锁定期间,在此期间尝试设置高程 角度将导致错误代码。
这也在同一页的“社区增加”部分中得到确认:
如果超出倾斜马达限制且运行时已锁定 倾斜电机让它休息,试图访问这个属性 导致在倾斜马达期间抛出 InvalidOperationException 锁定期。
为了解决这个问题,我在Microsoft的一个示例中看到了(我不记得哪个样本),在更改ElevationAngle
属性后,他们明确地避免了此属性的任何其他更改,持续时间为1 ,35秒。
此外,如果您在Kinect传感器未运行时尝试更改ElevationAngle
属性,则可以获得InvalidOperationException
。从上述相同的页面:
如果在Kinect传感器访问时访问ElevationAngle属性 没有运行(即,尚未调用Start方法),a 将抛出InvalidOperationException。