Hola!
Hace un tiempo escribí un post sobre la importancia de destruir correctamente los objectos del KinectSdk cuando cierras una app. La lección de hoy es parecida, pero acotada al trabajo con un Frame.
Por ejemplo, la siguiente porción de código muestra 2 formas de procesar un FRAME con el KinectSDK V2,
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| static void _bodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e) | |
| { | |
| var frame = e.FrameReference.AcquireFrame(); | |
| if (null == frame) return; | |
| using (frame) | |
| { | |
| frame.GetAndRefreshBodyData(_bodies); | |
| foreach (var body in _bodies) | |
| { | |
| if (null != body && body.IsTracked) | |
| { | |
| var msg = "Left:" + body.HandLeftState + " Right:" + body.HandRightState; | |
| Console.WriteLine(msg); | |
| } | |
| } | |
| } | |
| } | |
| static void _bodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e) | |
| { | |
| var frame = e.FrameReference.AcquireFrame(); | |
| if (null == frame) return; | |
| frame.GetAndRefreshBodyData(_bodies); | |
| foreach (var body in _bodies) | |
| { | |
| if (null != body && body.IsTracked) | |
| { | |
| var msg = "Left:" + body.HandLeftState + " Right:" + body.HandRightState; | |
| Console.WriteLine(msg); | |
| } | |
| } | |
| } |
La función entre las líneas 1 y 19, utiliza el frame dentro de un using(), y la 2da opción no lo hace. Lo extraño es que la 2da opción no da un error ni nada parecido. Sin embargo al no destruirse el farme, nunca vuelve a entrar a procesar un nuevo frame con lo que el proceso de información de Kinect queda detenido para esta aplicación.
Lección aprendida en vivo!
Saludos @ Home
El Bruno
Leave a comment