В настоящее время я работаю над небольшим проектом, включающим Kinect с оболочкой OpenNI C#. Для этого проекта глубина, изображение и пользовательский узел создаются с использованием файла конфигурации xml и метода Context.CreateFromXmlFile
. Запускается отдельный поток, выполняющий очень простой цикл (на примере UserTracker.net):
private void RunThread()
{
while(true)
{
try
{
context.WaitAnyUpdateAll(); //context is an OpenNI context object.
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
//process some data
}
}
Какое-то время это работает нормально, пока изображение, которое получает камера, не изменится. Через некоторое время отображается следующее исключение:
A timeout has occured when waiting for new data!
at OpenNI.Context.WaitAnyUpdateAll()
at <file described above>
После создания этого исключения все последующие вызовы context.WaitAnyUpdateAll
будут вызывать одно и то же исключение, независимо от входных данных. Через некоторое время сообщение об ошибке меняется на:
OpenNI.StatusException: The server has disconnected!
at OpenNI.Context.WaitAnyUpdateAll()
at <file described above>
Как я могу справиться с отсутствием нового ввода с помощью OpenNI? Я понимаю, что мы получаем исключение тайм-аута, когда новые данные недоступны, но как мы можем восстановиться после этого исключения?