我的应用程序中有一些键盘处理代码,例如Ctrl+ C。
我的应用程序的一些用户在键盘上非常快(按下Ctrl并立即按下C和释放两者),因此事件处理程序的速度不够快。
该效果同时出现在Windows Forms和WPF上。
请查看此 Windows 窗体示例。如果您对如何固定东西有任何建议,我会很高兴。您可以使用此示例来重现它(但您必须要快)。
我想知道其他应用程序是如何编程的。以 Visual Studio 为例。在那里,您输入该快捷方式的速度无关紧要。它的行为符合预期。
示例:当快捷方式成功捕获时,我有一个包含一个面板的窗口,该面板在 100 毫秒内变为红色。
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);
}
}
}