0

我的应用程序中有一些键盘处理代码,例如Ctrl+ C

我的应用程序的一些用户在键盘上非常快(按下Ctrl并立即按下C和释放两者),因此事件处理程序的速度不够快。

该效果同时出现在Windows FormsWPF上。

请查看此 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);
        }
    }
}
4

1 回答 1

2

Ctrl问题可能是一些用户在放开钥匙之前太快放手了C。我认为捕获KeyDown事件而不是KeyUp将是避免这些问题的好方法。

于 2012-07-26T11:13:13.777 回答