2013-09-03 2 views
0

У нас есть встроенная флеш-игра (crazytaxi.swf) внутри приложения формы Windows в VS Express 2012 для Windows Desktop. Мы контролируем игру с помощью жестов с помощью контроллера leapmotion.Контроллер Leap Listener перестает работать через некоторое время в VS2012

Что происходит, когда мы запускаем проект в VS2012, игра начинается нормально. Мы играем в игру, используя жест (слева, справа и т. Д.). Но после некоторого времени контроллер перестает слушать, выходя из потока. Мы видим, что в окне вывода , «Нить» (0x1b50) вышла с кодом 0 (0x0) ». это мы получаем в окне вывода.

Мы не знаем, как преодолеть эту проблему.

+0

В классе leapListener мы написали код как public override void OnExit (Controller cntrlr) { Console.WriteLine («Выход»); if (cntrlr.IsConnected) cntrlr.AddListener (новый LeapListener()); еще новый контроллер(). AddListener (новый LeapListener()); } Мы сделали это, потому что прослушиватель выходит между ними. Итак, мы добавляем нового слушателя после выхода. После добавления нового слушателя он переходит к методу onframe. Но никаких жестов не распознается. – Vaibhav

ответ

0

«Нитка '' (0x1b50) завершился с кодом 0 (0x0) в основном говорит, что:

Нить с ID 6992 побежал и завершил операцию успешно

System Error Codes (0-499)

. enter image description here

вопрос, имеет ли стопорное устройство слежения?

Вот мои 0x0-х из моего приложения Leap Motion (его рабочий режим):

Поток 'vshost.NotifyLoad' (0x364) вышел с кодом 0 (0x0). Поток '' (0x3348) вышел с кодом 0 (0x0). Поток 'vshost.LoadReference' (0x37c8) вышел с кодом 0 (0x0).

Кроме того, на боковой ноте, поскольку это не имеет никакого отношения к коду ошибки - вы удаляете слушателя из контроллера и затем удаляете их как при закрытии приложения? Неправильное удаление объектов вызовет проблемы.

Второе примечание - onExit и onDisconnet - это две разные вещи.

OnDisconnect (контроллер: Контроллер): аннулируются Вызывается, когда объект контроллера отключается от программного обеспечения Прыжок Motion. Слушатель

OnExit (контроллер: Контроллер): аннулируются Вызывается, когда этот объект Слушатель удаляется из контроллера или экземпляр контроллера будет уничтожен.

В случае, если кто-то испытывает подобные проблемы здесь ответ я послал по электронной почте после того, как взглянуть на код:

Я посмотрел на код, так как вы только прислал мне несколько файлов, которые я должен был закомментируйте ссылки на классы, которые не были включены в zip.

код прекрасно работает с 3-х различных устройств Leap Motion - когда я закомментировать от метода, то, что я предлагаю:

  1. Обновление SDK. Я использовал .Net 4 dll и последнюю версию SDK, которая сегодня: v.1.0.8.7665

  2. Утилизируйте объекты, как только вы закончите с ними.Утилизируйте фреймы после их использования, удалите прослушиватель из контроллера и удалите контроллер, когда устройство больше не используется или приложение закрывается.

  3. Я заметил несколько таймеров и диспетчеров, которые они создавали, но я не мог найти ссылок на то, где они были использованы. Для чего они используются? DispatcherTimer не входит в приложение форм Windows.

Мое предположение - и я ненавижу угадать - это то, что существует проблема многопоточности или что объекты не расположены правильно - или вы используете версию SDK, которая была ошибки.

У меня есть два приложения на GitHub - не стесняйтесь использовать код так, как вы хотите. Есть один для WPF и один для Windows Forms - оба должны быть обновлены для последнего SDK, поскольку некоторые вещи устарели (например, класс Screen) в более поздних версиях SDK.

WPF: https://github.com/IrisClasson/Leap-Motion

Windows Forms: https://github.com/IrisClasson/LeapMotion_WinForms_Demo_OLD_SDK

Отказ от ответственности: Я не так уж много, если развитие WinForms

+0

Да, контроллер движения прыжка останавливает отслеживание при выходе соответствующей нити. Я тоже отправил вам письмо. – Vaibhav

+0

Причина, по которой Leap Motion прекращает отслеживание, скорее всего, в коде, без какого-либо кода, который я не могу вам помочь. Отправьте свой код здесь. Просто догадываясь, что не так без исключений, трассировка стека или код не являются хорошим способом решения проблем. Работает ли пример с SDK? - если он сравнивает это с вашим кодом и видит, что отличается. Вставьте свой код здесь. –

0

У меня была такая же проблема с моим WPF приложения и Leap Motion но код отлично работает с консольным приложением.

В WPF, когда я во всем мире объявлял Leap-Listener и объект контроллера, я больше не сталкивался с этой ошибкой, и слушатель активно все время.

Просто объявить слушатель и контроллер в классе (во всем мире), из которого вы называете слушатель

общественности статической LeapListener слушатель;

public static Controller controller; 

теперь использовать этот объект слушателя, и добавить его к контроллеру и включите жест свойство контроллера в функции или конструктора.

listener = new LeapListener(); 
controller.AddListener(listener); 
controller = new Controller(); 

Это должно решить проблему. Если проблема все еще сохраняется (проблема обнаружения), просто инициализируйте и добавьте один и тот же объект-слушатель к объекту контроллера onExit. Теперь жест и другие свойства существуют, поскольку вы еще не создаете новый экземпляр контроллера.

1

Вы не предоставили достаточную информацию, но из того, что я собираю, поток LEAP бежал к завершению и закрыт. Это может произойти, если вы объявляете и инициализируете переменные слушателя и контроллера в функции, а переменные выходят из области действия при выполнении функции. Это заставляет сборщика мусора распоряжаться как контроллером, так и слушателем, что может показаться случайным (не воспроизводимым) моментом. Чтобы исправить эту проблему, создайте синглтон для контроллера и слушателя - это может сводиться к простому определению переменных статического контроллера и слушателя в каком-то классе. Таким образом, объекты-слушатели и контроллеры никогда не выйдут из сферы действия и не будут удалены GC.

Смежные вопросы