Xna 轮询相当于AllFramesReady事件?

Xna 轮询相当于AllFramesReady事件?,xna,kinect,Xna,Kinect,我正在使用官方的Kinect SDK 1.6和XNA Game Studio 4.0 我想知道是否有人能够一次对所有帧进行轮询,而不是以下内容: ColorImageFrame cFrame = _Device.ColorStream.OpenNextFrame(100); DepthImageFrame dFrame = _Device.DepthStream.OpenNextFrame(100); SkeletonFrame sFrame = _Device.SkeletonStream.O

我正在使用官方的Kinect SDK 1.6和XNA Game Studio 4.0

我想知道是否有人能够一次对所有帧进行轮询,而不是以下内容:

ColorImageFrame cFrame = _Device.ColorStream.OpenNextFrame(100);
DepthImageFrame dFrame = _Device.DepthStream.OpenNextFrame(100);
SkeletonFrame sFrame = _Device.SkeletonStream.OpenNextFrame(100);
我不希望在循环中进行三次同步调用。我真的希望类似于
\u Device.OpenAllFrames(100)
的东西,但是对于轮询方法,似乎没有与allframesrady事件等效的东西


我无法切换到事件驱动方法,因为它实际上不适合XNA。或者有谁有更好的方法在XNA的循环中访问Kinect的流吗?

我建议在SDK上创建自己的简单Kinect管理器(这就是我在一个项目中所做的)

此管理器可以是一个单例对象,用于侦听来自深度、颜色和骨架流的事件,并仅将最新可用帧保存到某些局部变量(如果不需要,还可以优化和禁用某些流)

在您的XNA游戏循环中,您可以访问这些变量,您将拥有可用的最新帧。需要进行一些线程同步,以防止在管理器写入变量时读取变量

除了此功能外,此管理器还帮助我处理Kinect传感器断开/重新连接的情况。manager对象始终在那里,而不是始终测试传感器是否已连接,但它不会在本地存储任何新帧

当然,XNA游戏仍然可以处理断开/连接事件,以防它想做一些特殊的事情,但在游戏循环中,我不必总是测试是否连接了有效的kinect传感器