2013-04-22 11 views
7

Ich arbeite derzeit an einem kleinen Projekt mit einem Kinect mit dem OpenNI C# -Wrapper. Für dieses Projekt werden eine Tiefe, ein Bild und ein Benutzerknoten mithilfe einer XML-Konfigurationsdatei und der Methode Context.CreateFromXmlFile erstellt. Ein separater Thread gestartet, der eine sehr einfache Schleife tut (basierend auf dem UserTracker.net Beispiel):OpenNI C# -Wrapper: WaitAnyUpdateAll 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 

    } 
} 

dies für eine Weile ganz gut funktioniert, bis das Bild der Kamera ändert sich nicht empfängt. Nach kurzer Zeit ist die folgende Ausnahme angezeigt:

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

wird nach dieser Ausnahme alle nachfolgenden Anrufe geworfen context.WaitAnyUpdateAll die gleiche Ausnahme, unabhängig davon, wird werfen, was die Eingabe. Nach einer Weile ändert sich die Fehlermeldung in:

Wie kann ich mit keinem neuen Eingang mit OpenNI umgehen? Ich verstehe, dass wir eine Zeitüberschreitungsausnahme erhalten, wenn keine neuen Daten verfügbar sind, aber wie können wir diese Ausnahme wiederherstellen?

Antwort

5

Es stellt sich heraus, dass das Problem war, dass ich keine unsichere Schleife verwendet habe. Es scheint, dass WaitAnyUpdateAll erfordert, in einem unsicheren Kontext ausgeführt zu werden, und das habe ich hier nicht getan. Das Hinzufügen des unsafe-Schlüsselworts zur Funktionsdefinition löste das Problem.