如何在Kinect Toolbox中检测重播结束

时间:2012-10-21 04:43:39

标签: kinect replay kinect.toolbox

我在我的项目中使用Kinect.Toolbox,我需要在重播结束后显示一条消息。有没有办法搞定这个时刻?

我的代码执行以下操作

Stream recordStream = File.OpenRead(@"D:\recorded.FisioKinect");
this.Replay = new KinectReplay(recordStream);
this.Replay.ColorImageFrameReady += replay_ColorImageFrameReady;
this.Replay.Start();

并且replay_ColorImageFrameReady在这里

void replay_ColorImageFrameReady(object sender, ReplayColorImageFrameReadyEventArgs e)
{
    if (this.Replay.IsFinished)
    {
        MessageBox.Show("End");
    }
    byte[] pixelData = new byte[e.ColorImageFrame.PixelDataLength];
    e.ColorImageFrame.CopyPixelDataTo(pixelData);
    // Other awesome stuff :)
}

请注意,Replay对象有一个名为IsFinished的属性,但如果Replay IsFinished将不会引发replay_ColorImageFrameReady,因此,将永远不会显示该消息。

Kinect.Toolbox的代码使用TPL,我不太了解TPL,我想更改Kinect.Toolbox的代码来触发像OnReplayEnd这样的事件

1 个答案:

答案 0 :(得分:0)

您可以构建这样的结构:

在你的KinectReplay.cs

添加

public event EventHandler Closing;

protected virtual void OnClosing()
{
    EventHandler Closing = this.Closing;
    if (Closing != null)
        Closing(this, EventArgs.Empty);
}  

并在您想要使用它的任何地方触发它。

replay.Closing += new EventHandler(replayMediaEnded);