/// <summary>
/// Scanning routine for device input
/// </summary>
/// <param name="sender">Event Source</param>
/// <param name="e">Event arguments</param>
private void Scan(object sender, DoWorkEventArgs e)
{
Joystick joystick = new Joystick(0);
Joystick.Status status;
String buttons = "";
BackgroundWorker worker = (BackgroundWorker) sender;
while (!worker.CancellationPending)
{
status = joystick.GetCurrentStatus();
buttons = status.Buttons.ToString();
// action button
if (buttons != "0")
{
List<string> inputs = buttons.Split(new[] { "Button", ", " }, StringSplitOptions.RemoveEmptyEntries).ToList();
SetClickCallBack callBack = SetClick;
for (int i = 0; i < Buttons.Length; i++)
{
Buttons[i].Dispatcher.Invoke(callBack,
new object[] {i.ToString(),
inputs.Contains((i+1).ToString())});
}
}
else
{
SetClickCallBack callBack = SetClick;
for (int i = 0; i < Buttons.Length; i++)
{
Buttons[i].Dispatcher.Invoke(callBack,
new object[] {i.ToString(), false});
}
}
try
{
// navigation button
switch ((int)status.XAxis)
{
case -1:
Left.Dispatcher.Invoke(() =>
{
Left.Click = true;
}
);
break;
case 1:
Left.Dispatcher.Invoke(() =>
{
Right.Click = true;
}
);
break;
default:
Left.Dispatcher.Invoke(() =>
{
Left.Click = false;
}
);
Left.Dispatcher.Invoke(() =>
{
Right.Click = false;
}
);
break;
}
switch ((int)status.YAxis)
{
case -1:
Up.Dispatcher.Invoke(() =>
{
Up.Click = true;
}
);
break;
case 1:
Down.Dispatcher.Invoke(() =>
{
Down.Click = true;
}
);
break;
default:
Up.Dispatcher.Invoke(() =>
{
Up.Click = false;
}
);
Down.Dispatcher.Invoke(() =>
{
Down.Click = false;
}
);
break;
}
}
catch (TaskCanceledException )
{
break;
}
}
}