기본적으로 이 로우 레버 SlimDX 래퍼 라이브러리를 둘러 싸고 XBOX 360 컨트롤러에 대해 관리가 쉬운 API를 제공하는 작은 XBox 360 무선 컨트롤러 관리 인터페이스를 작성했습니다.타이머, UI 프레임 워크 및 불량 커플 링 - 모든 아이디어?
내부적으로 클래스는 N ms마다 게임 패드를 폴링하고 컨트롤러의 기본 상태 변화를 감지 할 때 이벤트를 촬영합니다.
내가 basiclly 적은 두 가지 악 사이에서 선택을 강요 타이머 죽은 것을 끝 약간의 경험 해요 :
하나 내 XBox360GamePad 클래스 UI 프레임 워크의 특정을 (즉 지원 WPF/윈폼이 될 것입니다 클래스에서 하드 코딩되고 클래스는 이러한 프레임 워크를 참조해야합니다.)
클래스를 완전히 프레임 워크에 독립적으로 설정하지만 Dispatcher.Invoke/Invoke() 호출로 코드를 뿌리도록 사용자에게 강요하십시오. 생성 된 이벤트에 따라 UI를 업데이트 할 수 있습니다.
내가 (불가지론 코드 UI를 만드는) 후자의 옵션을 선택하면, 나는 기본적으로 "일반적인"System.Timers.Timer 또는 어떤 UI 종속성이없는 모든 타이머를 사용합니다. 그런 경우에는 UI를 직접 업데이트 할 수없는 스레드 (즉, WPF)에서 발생하는 이벤트 생성/호출이 끝나면 Dispatcher의 (추악한) 사용을 통해 발생하는 모든 업데이트 양식을 360 컨트롤러 클래스로 보내야합니다. 호출.
반면 DispatcherTimer를 XBox 360 Controller 클래스에서 사용하는 경우 UI를 직접 업데이트 할 수있는 작동하는 구성 요소가 있지만 지금은 전체 컨트롤러 클래스가 WPF에 결합되어 있습니다. WPF에 의존하지 않고 사용할 수 있습니다. (즉, 순수한 콘솔 앱에서)
제가보기에는 일종의 정렬 솔루션으로 프레임 워크에 전혀 영향을 미치지 않고 UI를 업데이트 할 수 있습니다. Dispatcher.Invoke() 기법의 종류 ... 예를 들어 모든 타이머에 대한 공유 기본 클래스가있는 경우 관련 시나리오에 따라 종속성으로 타이머를 주입 할 수 있습니다. 누구든지이 정렬을 성공적으로 처리했습니다 문제가 뭐야?