При опросе моего геймпада, и он ничего не делает в течение минуты или двух, элемент управления PoV переходит в какой-то режим ожидания и ничего не возвращает, но нажатие выбранной кнопки вызывает его. Это нормально и есть ли способ удержать PoV от сна?
Активация Ckeckbox ....
private void CheckBoxJoystick_Checked(object sender, EventArgs e)
{
if (CheckboxJoystick.IsChecked.HasValue & CheckboxJoystick.IsChecked == true)
{
var windowHandle = Process.GetCurrentProcess().MainWindowHandle;
_gamepad = new Gamepad(windowHandle);
if (!_gamepad.IsAvailable) return;
ctsGamepad?.Cancel();
ctsGamepad = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(DoGamepadWork, ctsGamepad.Token);
}
}
Основной цикл для опроса геймпада ...
private void DoGamepadWork(object obj)
{
if (!_gamepad.IsAvailable) return;
var token = (CancellationToken)obj;
var buttontocheck = -1;
var povtocheck = new PovPair(-1,0);
while (true)
{
if (token.IsCancellationRequested)
{
break;
}
_gamepad.Poll();
// Check buttons...
// Check PoVs...
Thread.Sleep(100);
}
}
опрос геймпада ....
public void Poll()
{
try
{
if (!IsAvailable) return;
joystick.Acquire();
joystick.Poll();
State = joystick.GetCurrentState();
Buttons = State.Buttons;
Povs = State.PointOfViewControllers;
Datas = joystick.GetBufferedData();
}
catch(Exception ex)
{ }
}
Находит подключенные геймпады ...
private void Find()
{
foreach (var deviceInstance in directInput.GetDevices(DeviceType.Gamepad, DeviceEnumerationFlags.AttachedOnly))
joystickGuid = deviceInstance.InstanceGuid;
// If Gamepad not found, look for a Joystick
if (joystickGuid == Guid.Empty)
foreach (var deviceInstance in directInput.GetDevices(DeviceType.Joystick, DeviceEnumerationFlags.AttachedOnly))
joystickGuid = deviceInstance.InstanceGuid;
// If Joystick not found
if (joystickGuid == Guid.Empty)
{
IsAvailable = false;
return;
}
// Instantiate the joystick
joystick = new Joystick(directInput, joystickGuid);
joystick.SetCooperativeLevel(hWnd, CooperativeLevel.Background | CooperativeLevel.NonExclusive);
// Set BufferSize in order to use buffered data.
joystick.Properties.BufferSize = 128;
// Acquire the joystick
joystick.Acquire();
IsAvailable = true;
Load_Settings();
}