アプリケーションにキーボード処理コードがあります(例:Ctrl+ ) C。
私のアプリケーションのユーザーの中には、キーボードを非常に速く操作する人がいるため(両方を押しCtrlてすぐに押しCて放す)、イベントハンドラーはキーボードを十分に速く取得できません。
この効果は、WindowsフォームとWPFの両方で発生します。
このWindowsフォームの例をご覧ください。物を固定する方法について何か提案があれば、私は幸せです。このサンプルを使用して再現することができます(ただし、迅速に行う必要があります)。
他のアプリケーションがどのようにプログラムされているのか疑問に思います。VisualStudioを使用します。そこでは、そのショートカットをどれだけ速く入力するかは関係ありません。期待どおりに動作します。
サンプル:ショートカットが正常にキャプチャされると、100ミリ秒間赤く着色される1つのパネルを含むウィンドウがあります。
using System;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace KeyboardShortcutTest
{
public partial class Form1 : Form
{
private TaskScheduler _uiScheduler;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
KeyUp += Form1_KeyUp;
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.C)
{
ColorizePanelRed(_displayPanel);
}
}
private void ColorizePanelRed(Panel panel)
{
Color c = panel.BackColor;
Task.Factory.StartNew(() => { panel.BackColor = Color.Red; }, CancellationToken.None, TaskCreationOptions.None, _uiScheduler)
.ContinueWith(t => { Thread.Sleep(100); })
.ContinueWith(t => { panel.BackColor = c; }, _uiScheduler);
}
}
}