C# 不正确、缺失和重复的按键事件

C# 不正确、缺失和重复的按键事件,c#,winforms,mono,C#,Winforms,Mono,在如何处理键盘事件的OSX实现中似乎存在一个bug。当连续快速按下多个键或同时按下所有键时,该错误就会暴露出来 在Win7上运行我的应用程序如果我同时按下“J”“K”“L”键,我总能得到所有三个键(尽管不是按任何特定顺序)。但在OSX上,当运行Windows窗体应用程序时,我可以得到“JJJ”或“JKK”或“LLL”。OSX中没有其他地方显示这种行为(原生Cocoa应用程序,如TextEdit,其行为与Win7相同) 源代码:(在Visual Studio中,创建windows窗体项目,并编辑F

在如何处理键盘事件的OSX实现中似乎存在一个bug。当连续快速按下多个键或同时按下所有键时,该错误就会暴露出来

在Win7上运行我的应用程序如果我同时按下“J”“K”“L”键,我总能得到所有三个键(尽管不是按任何特定顺序)。但在OSX上,当运行Windows窗体应用程序时,我可以得到“JJJ”或“JKK”或“LLL”。OSX中没有其他地方显示这种行为(原生Cocoa应用程序,如TextEdit,其行为与Win7相同)

源代码:(在Visual Studio中,创建windows窗体项目,并编辑Form1的代码):

在Windows 7上运行(一次命中所有JKL):

在OSX上运行(一次全部命中JKL;注意可能需要几次尝试)

如果您错过了它,所有按键事件都是“k”,结果是“kkk”。为什么呢

更新:我正在山狮上运行Mono 2.10.10

public partial class Form1 : Form
{
    public Form1(){
        InitializeComponent();
        KeyPress += Form1_KeyPress;
        KeyDown += Form1_KeyDown;}
    void Form1_KeyDown(object sender, KeyEventArgs e)
        {Console.WriteLine("KeyDown: " + e.KeyCode.ToString());}
    void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {Console.WriteLine("KeyPress: " + e.KeyChar.ToString());}
}
KeyDown: L
KeyPress: l
KeyDown: J
KeyPress: j
KeyDown: K
KeyPress: k
KeyDown: L
KeyPress: k
KeyDown: J
KeyPress: k
KeyDown: K
KeyPress: k