You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kinect v2 BodyFrameReader.FrameArrived事件突发停止触发:是否存在IDisposable泄漏?

Kinect v2 BodyFrameReader.FrameArrived 事件突然停止触发的排查求助
  • 问题现象:基于C# + Kinect v2 API开发的应用中,极少出现BodyFrameReader.FrameArrived事件突然停止触发的情况,导致订阅该事件的函数无法执行,对应用运行造成严重影响。该Bug仅在3-4人面对传感器时才可能出现,目前无法明确此场景与Bug的关联,且难以独自复现。已锁定两种可能性:一是事件在源端停止触发,二是订阅的方法被意外取消订阅(后者可能性极低)。

  • 排查情况:参考微软开发者视频,此类问题通常由FrameReference泄漏(未调用Dispose())导致,目前代码中已手动调用frame.Dispose(),且确认注释间的应用专属函数(gatherBodies()、sortBodies()、affectBodiesToPlayers())未抛出异常,不会阻碍frame.Dispose()执行,暂未发现泄漏点。

  • 求助需求:计划改用using关键字管理frame资源,但因无法复现问题,希望确认此举能否真正解决事件停止触发的问题;同时希望获得进一步的排查方向建议。

当前处理帧的代码如下:

private static void onBodyFrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
    var frame = e.FrameReference.AcquireFrame();

    if (frame != null)
    {
        var floorClipPlane = frame.FloorClipPlane;
        
        m_captorAngle = System.Math.Atan(floorClipPlane.Z / floorClipPlane.Y);
        m_captorHeight = floorClipPlane.W;

        if (m_bodies == null)
            m_bodies = new Body[m_kinectSensor.BodyFrameSource.BodyCount];
        
        //BELOW SOME APPLICATION SPECIFIC FUNCTIONS
        gatherBodies();
        sortBodies();
        affectBodiesToPlayers();
        //-----------------------------------------

        frame.GetAndRefreshBodyData(m_bodies);
        frame.Dispose();
        frame = null;
    }
}

内容的提问来源于stack exchange,提问作者Anselme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:53:20