2015-10-09 5 views
1

Я сейчас обновляю свою программу Kinect от 1.8 до 2.0, но у вас проблемы.kinect 2 C# тип события преобразование

//Please consider the follow code 
    public abstract class ISkeletonFrameHandler 
    { 
     //version 1.8 
     //public abstract void FrameReady(object sender, SkeletonFrameReadyEventArgs e); 
     //version 2.0 
     public abstract void FrameReady(object sender, BodyFrameArrivedEventArgs e); 
    } 

    public void AddSkeletonFrameHandler(ISkeletonFrameHandler handler) 
    { 
     if (this.IsSkeletonStreamReady) 
     { 
      try 
      { 

       //SDK 1.8 below is not problem 
       //this.Sensor.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(handler.FrameReady); 
       //SDK 2.0 below get error CS0029, cannot convert type to type 
       this.Sensor.BodyFrameSource.FrameCaptured += new EventHandler<BodyFrameArrivedEventArgs>(handler.FrameReady); 
       } 
      catch (Exception e) 
      { 
     Event.Track("Fail to start the skeleton event handler!", Event.Type.Warning, e); 
      } 
     } 
    } 

Как я могу изменить оператор события, чтобы избежать ошибки?

+0

'не может преобразовать тип в type' - какой тип, к которому один? Ошибка также должна печатать эти типы. – pwas

+0

Код ошибки: «CS0029 C# Невозможно неявно преобразовать тип» System.EventHandler 'to' System.EventHandler '" –

ответ

1

В Kinect нет ничего как SkeletonFrame. В kinect 2 BodyFrame представлены скелетные данные. Помните, что только потому, что BodyFrame обеспечивает скелетные данные, это не значит, что он равен SkeletonFrame. В структурах и данных классов много различий.

Сейчас, я думаю, this.Sensor.BodyFrameSource.FrameCaptured += new EventHandler<BodyFrameArrivedEventArgs>(handler.FrameReady); Эта строка вашей программы несет ответственность за указанную вами ошибку.

Код ошибки "CS0029 C# Не удается неявно преобразовать тип System.EventHandler<Microsoft.Kinect.BodyFrameArrivedEventArgs> в System.EventHandler<Microsoft.Kinect.FrameCapturedEventArgs>

Написать this.Sensor.BodyFrameSource.FrameCaptured, а затем написать +=. Visual Studio должна предложить IntelliSence, если этого не произойдет, нажмите Ctrl + Пространство, тогда визуальная студия должна показать это предложение.

enter image description here

Пресс Вкладка для вставки. Visual Studio Intellisence автоматически предложит вам нажать Tab, чтобы сгенерировать метод заглушки. Нажмите Вкладка. Будет создан порог метода.

enter image description here

Написать свой код события обработчик внутри сгенерированный метод.

enter image description here

+0

Пожалуйста, дайте мне знать, если это поможет. –

+0

Короче говоря, как мы можем переписать следующий код на версию 2? –

+0

общественного абстрактный класс ISkeletonFrameHandler {общественных абстрактных недействительный FrameReady (объект отправитель, SkeletonFrameReadyEventArgs д);} общественных недействительный AddSkeletonFrameHandler (ISkeletonFrameHandler обработчик) {this.Sensor.SkeletonFrameReady + = новый EventHandler (handler.FrameReady);} –