2012-06-29 28 views
5

Tôi đang làm việc trên Kinect, và thỉnh thoảng Kinect làm cho Visual Studio Crash.Cách đóng tay cầm của cổng USB Kinect để ngăn VisualStudio gặp sự cố?

Nó đang xảy ra khi tôi gọi phương thức kinectSensor.Start() sau khi gỡ lỗi tôi phát hiện ra rằng Kinect đã được sử dụng trong quá trình khác.

Nhưng không có quy trình nào khác đang sử dụng Kinect! Đã xảy ra một lần vào buổi sáng sau khi khởi động máy của tôi và khởi chạy ứng dụng. Nhưng phần lớn thời gian xảy ra khi tôi khởi chạy ứng dụng Kinect (trong chế độ gỡ lỗi trong VisualStudio 2010), tôi dừng ứng dụng và sau khi sửa đổi mã, tôi khởi động lại ứng dụng và thời gian không hoạt động, tôi đã có ngoại lệ trên và sau 2 giây Visual Studio gặp sự cố.

Hơn nữa tôi kiểm tra nếu Kinect vẫn đang chạy và đây không phải là trường hợp (sau đây tình trạng của bộ cảm biến Kinect trong gỡ lỗi):

state of kinect sensor (debug mode)

Điều kỳ lạ nhất trên tất cả được rằng đôi khi nó hoạt động tốt cho hàng tuần, và sau đó nó làm cho điều đó trong hai ngày mỗi hai/ba ra mắt của ứng dụng.

Giải pháp duy nhất tôi tìm thấy về đề tài này là từ một chàng trai với một vấn đề rất giống nhau (là người duy nhất trên internet?): Imad Elayyan

Khi tôi khởi động Process Explorer tôi thấy vấn đề chính xác cùng xử lý cổng USB (được hiển thị trên ảnh), một quy trình đột biến không bị chấm dứt khi chúng tôi đóng ứng dụng.

mutant process for the USB handle of the Kinect

Nhưng giải pháp của ông là không thực sự một giải pháp lâu dài: Tôi phải giết bằng tay các đột biến và tái khởi động VisualStudio. Đôi khi tôi phải khởi động lại VS 20 lần vào buổi sáng ...

Có cách nào để đóng đúng cách xử lý cổng USB đó không? không làm cho vụ tai nạn VS nữa?

Bất kỳ trợ giúp nào sẽ được đánh giá cao, điều đó thực sự khiến tôi khó hiểu và điều đó khiến tôi phát điên.

thông tin bổ sung:

Tôi đang sử dụng các SDK1.5 + Kinect cho Windows nhưng nó cũng là trường hợp với SDK1.0 + Kinect Xbox360

Tôi đã đã cố gắng gỡ lỗi VS với một phiên bản khác của VS.

+0

Điều này nghe giống như lỗi SDK hoặc điều gì đó mà nhóm SDK nên giải quyết ít nhất. Bạn có thể báo cáo điều này cho nhóm dự án bằng cách nào đó không? Rất tiếc, tôi không thấy nó trên https://connect.microsoft.com/ – Rup

+0

Tôi cũng không tìm thấy cách liên hệ với họ. Tôi đã thử liên kết của bạn và Kinect chính thức cho cửa sổ trang web (nhà phát triển => Nhận hỗ trợ kỹ thuật), nhưng tôi được chuyển hướng đến XBox trực tiếp và sau đó tôi không thể tìm thấy cách giải quyết vấn đề của mình. Tôi sẽ tìm kiếm lại ... – astreal

+0

Ngoài ra còn có [twitter của họ] (https://twitter.com/KinectWindows) và [diễn đàn MSDN] của họ (http://social.msdn.microsoft.com/Forums/en- US/category/kinectsdk) - nhưng tôi đã không có nhiều may mắn khi báo lỗi trong diễn đàn của Microsoft: -/ – Rup

Trả lời

0

Ok guys, cảm ơn vì đã quan tâm. Tôi nghĩ rằng tôi tìm thấy nguồn gốc của vấn đề của tôi nhưng Tôi vẫn thiếu một lời giải thích cho cổng xử lý.

Sự kiện:

  1. Tôi có 3 dự án trong giải pháp của tôi, hai lớp thư viện: Kinect.dll mà tạo ra các kết nối đến thiết bị, xử lý các phần recognitionj cử chỉ và tạo ra con trỏ. KinectControls.dll tạo điều khiển (nút, đường viền, biểu đồ 3D ...) có thể tương tác với các con trỏ. Và một dự án thử nghiệm.

  2. Kinect.dll khởi động sự kiện của Kinect + một số sự kiện tùy chỉnh: ColorFrameReady, DepthFrameReady, GestureRecognised ...

  3. Hầu hết các trường hợp là nội bộ trong việc lắp ráp, nhưng một số có thể nhìn thấy từ bên ngoài các lớp học.

  4. Mỗi sự kiện được đăng ký không được đăng ký (hoặc vì vậy tôi nghĩ).

  5. Tôi đã triển khai facade pattern cho các lớp học liên quan đến Kinect. KinectFacade sở hữu phương thức KinectStop đóng các sự kiện kết nối và hủy đăng ký .

Gốc của vấn đề:

Khi ứng dụng đã được đóng cửa, các Application.Current.Shutdown() phương pháp gọi là KinectStop mà dừng Kinect và không đăng ký xử lý trong việc lắp ráp. Nhưng trong các hội đồng bên ngoài, việc không đăng ký được gọi sau khi Kinect đóng cửa (ngay cả khi việc hủy đăng ký cũng được gọi là Application.Current.Shutdown()) dẫn tới lỗi 'cơ bản/thông thường'. Vì vậy, tôi đã xóa bỏ đăng ký.

Khi bạn không unregister của sự kiện Kinect và Kinect đóng (KinectSensor.stop() phương pháp gọi là), nó (thỉnh thoảng) giữ cho USB xử lý ngay cả khi ứng dụng được đóng lại và chủ đề bất kì chấm dứt !! Và sau đó: Không có cách nào để mở lại ứng dụng (Kinect.Start() sự cố) và cuối cùng khi bạn cố gắng đóng Visual studio nó treo (như được giải thích trong câu hỏi của tôi).

Giải pháp tôi đã tìm thấy

Khi KinectStop() được gọi là tôi sử dụng một bộ đếm thời gian trước khi chốt Kinect để mỗi lớp học trong hội đồng bên ngoài thể hủy đăng ký các sự kiện.

Hơn nữa, hiện tại không có sự kiện 'bình thường' nào từ các lớp bên ngoài: mặt tiền xử lý các sự kiện đó và tăng FastSmartWeakEvent có sẵn từ thế giới bên ngoài. Nó giải quyết rò rỉ bộ nhớ và cũng có thể giải quyết vấn đề của tôi trong một số tình huống.

Vì sau đó không xử lý cổng USB được giữ lại và Visual Studio không bị treo nữa.

Tóm tắt

tôi đã tìm thấy gốc rễ của vấn đề của tôi và một giải pháp để vượt qua nó. Tôi hy vọng điều này sẽ giúp bất kỳ ai có vấn đề tương tự.

Tuy nhiên Tôi sẽ không hiểu tại sao đóng ứng dụng và/hoặc gọi KinectSensor.Stop() phương thức từ SDK không đóng tất cả xử lý sự kiện/Chủ đề/quy trình/Xử lý cổng. Và tại sao việc đóng studio trực quan lại làm cho nó sụp đổ ngay cả khi một trong những phiên bản trước vẫn đang chạy?

Nếu có ai có đề xuất, nó sẽ được hoan nghênh?

-2

Thử cửa sổ va chạm. Nó sẽ giải quyết vấn đề của bạn một cách dễ dàng.

+0

Đó là gì? Tôi không thể thấy bất kỳ điều gì rõ ràng trên Google. – Rup

0

Đảm bảo chắc chắn Kinect được cắm vào cổng USB 2.0 và KHÔNG USB 3.0.

Microsoft Kinect không hỗ trợ USB3.0 và tất cả các loại kết quả hành vi điên từ việc sử dụng một với Kinect.

Tôi đã gặp phải nhiều vấn đề không thường xuyên như bạn và sự cố đã được giải quyết khi tôi bắt đầu sử dụng một trong số ít cổng USB2.0 trên máy của mình.

Các vấn đề liên quan