GameInput precisa lidar com eventos assíncronos internos, como dispositivos de entrada sendo conectados ou desconectados. Esses eventos ocorrem com pouca frequência. No entanto, os aplicativos também podem registrar retornos de chamada que talvez precisem ser despachados com mais frequência. Por padrão, o GameInput cria um thread de trabalho executado com uma prioridade ligeiramente elevada (THREAD_PRIORITY_ABOVE_NORMAL) para atender a esses eventos.
Aplicativos que desejam mais controle sobre quando esse trabalho ocorre e em qual thread/processador podem controlar manualmente o processamento desses eventos por meio da interface IGameInputDispatcher. Essa interface é obtida chamando o método CreateDispatcher na interface IGameInput. Essa interface expõe dois métodos que você pode usar para despachar manualmente o trabalho das filas de trabalho internas do GameInput. Use o método Dispatch para despachar o trabalho pendente (se houver) das filas de trabalho do GameInput. Os aplicativos podem chamar esse método periodicamente. Como alternativa, eles podem aguardar no identificador retornado pelo método OpenWaitHandle do dispatcher para detectar quando foi enfileirado um trabalho que precisa ser despachado.
Enquanto o aplicativo mantiver uma referência à interface do dispatcher, ele permanecerá no controle do despacho do trabalho. Depois que todas as referências à interface do dispatcher forem liberadas, o GameInput voltará a usar um thread de trabalho interno para atender aos eventos.
