Я хочу создать простую службу WCF, которая возвращает данные глубины от датчика Kinect. Вот мой код:KinectSensor.DepthStream.OpenNextFrame возвращает NULL
[DataContract]
public class DepthFrame
{
[DataMember]
public short[] depthData { get; set; }
}
[ServiceContract]
public interface IKinectTools
{
[OperationContract]
DepthFrame getDepthData();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class KinectTools : IKinectTools
{
public DepthFrame getDepthData()
{
DepthFrame df = new DepthFrame();
KinectSensor kinect = KinectSensor.KinectSensors[0];
kinect.DepthStream.Enable();
kinect.Start();
DepthImageFrame depthFrame = kinect.DepthStream.OpenNextFrame(5);
df.depthData = new short[depthFrame.PixelDataLength];
depthFrame.CopyPixelDataTo(df.depthData);
return df;
}
}
но код не работает. При запуске службы я получаю сообщение об ошибке в следующей строке:
df.depthData = new short[depthFrame.PixelDataLength];
потому что глубина рамки равна нулю. Почему переменная depthFrame равна null, когда я вызываю метод OpenNextFrame?
Заранее спасибо!
Какая полная трассировка исключений, пожалуйста? –
Исключение NullReferenceException не было обработано кодом пользователя. В экземпляре объекта не задана ссылка на объект. http://s12.postimg.org/eo2laxdbh/image.png –
Держитесь - что-то мне пришло в голову. Когда вы говорите «услуга WCF», вы имеете в виду «работа в сеансе 0 как часть IIS»? Я был бы очень удивлен, если бы Kinect SDK был безопасен для вызова из контекста службы, поэтому, если вы это делаете, вам может понадобиться подумать о другом подходе. Многие API окон не поддерживаются при работе в контексте службы. – Stewart