2013-04-22 17 views
7

Attualmente sto lavorando a un piccolo progetto che coinvolge un Kinect con il wrapper OpenNI C#. Per questo progetto vengono creati profondità, immagine e nodo utente utilizzando un file di configurazione xml e il metodo Context.CreateFromXmlFile. Un thread separato viene avviato un ciclo che fa molto semplice (sull'esempio UserTracker.net):wrapper OpenNI C#: WaitAnyUpdateTutti timeout

private void RunThread() 
{ 
    while(true) 
    { 
     try 
     { 
      context.WaitAnyUpdateAll(); //context is an OpenNI context object. 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

     //process some data 

    } 
} 

Questo funziona bene per un po ', finché l'immagine della telecamera riceve non cambia. Dopo poco viene mostrata la seguente eccezione:

A timeout has occured when waiting for new data! 
    at OpenNI.Context.WaitAnyUpdateAll() 
    at <file described above> 

dopo questa eccezione viene generata tutte le chiamate successive context.WaitAnyUpdateAll solleverà la stessa eccezione, indipendentemente da ciò che l'ingresso è. Dopo un po 'il messaggio di errore cambia in:

OpenNI.StatusException: The server has disconnected! 
    at OpenNI.Context.WaitAnyUpdateAll() 
    at <file described above> 

Come posso gestire nuovi input con OpenNI? Capisco che riceviamo un'eccezione di timeout quando non sono disponibili nuovi dati, ma come possiamo recuperare da questa eccezione?

risposta

5

Si è scoperto che il problema era che non ho utilizzato un ciclo non sicuro. Sembra che WaitAnyUpdateAll richieda di essere eseguito in un contesto non sicuro, e non l'ho fatto qui. L'aggiunta della parola chiave non sicura alla definizione della funzione ha risolto il problema.