2013-04-22 87 views
7

我目前正在研究一個涉及Kinect與OpenNI C#封裝的小項目。對於此項目,使用xml配置文件和Context.CreateFromXmlFile方法創建深度,圖像和用戶節點。一個單獨的線程開始它的表現非常簡單的循環(基於UserTracker.net爲例):OpenNI C#封裝:WaitAnyUpdateAll超時

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的新輸入?我知道,如果沒有新的數據可用,我們會得到一個超時異常,但我們如何從這個異常中恢復?

回答

5

事實證明,問題是我沒有使用不安全的循環。看來WaitAnyUpdateAll需要在不安全的環境下運行,而我在這裏沒有這樣做。將不安全的關鍵字添加到函數定義解決了問題。