C# 键控延迟

C# 键控延迟,c#,onkeydown,C#,Onkeydown,我有这样一个方法来避免无限键下循环: protected override void OnKeyDown(KeyEventArgs e) { if (bKeyIsDown) bKeyIsDown = false; bKeyIsDown = true; base.OnKeyDown(e); } protected override void OnKeyUp(KeyEventArgs e) { b

我有这样一个方法来避免无限键下循环:

    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (bKeyIsDown) bKeyIsDown = false;
        bKeyIsDown = true;
        base.OnKeyDown(e);
    }
    protected override void OnKeyUp(KeyEventArgs e)
    {
        base.OnKeyUp(e);
        bKeyIsDown = false;
    }
问题是如果我同时按两个键,它只会执行第一个键的操作。此外,如果您按下一个键,同时按下另一个键,则该键的操作将延迟


有办法解决这个问题吗?谢谢

您可以跟踪当前按下的键。像这样的

bool bKeyIsDown = false;
Keys currentKey = Keys.None;

public event EventHandler OnKeyPressedOnce;

protected override void OnKeyDown(KeyEventArgs e)
{
    if (bKeyIsDown && currentKey == e.KeyCode)
        e.SuppressKeyPress = true;
    else
    {
        currentKey = e.KeyCode;       

        //have your class handle this event and play the sound when this fires    
        //Could also create custom EventArgs and pass the key pressed 
        if(OnKeyPressedOnce != null)
           OnKeyPressedOnce(null, EventArgs.Empty);

        bKeyIsDown = true;
    }

    base.OnKeyDown(e);
}


protected override void OnKeyUp(KeyEventArgs e)
{
    bKeyIsDown = false;
    base.OnKeyUp(e);
}
如果您希望一次处理两个以上的按键,可以存储正在按下的按键列表,而不仅仅是当前按键

根据评论更新。以下是it处理事件的基本要点

private void KeyPressedOnce_PlaySound(object sender, EventArgs e)
{
    if (currentKey == Keys.A)
    { 
        MediaPlayer p1 = new MediaPlayer();
        p1.Open(new System.Uri(wav1Path));
        p1.Play();
    }


    if (currentKey == Keys.S)
    {
        MediaPlayer p2 = new MediaPlayer();
        p2.Open(new System.Uri(wav2Path));
        p2.Play();
    }
}

你想做什么?在按键按下时播放声音,并在按键释放时停止。按键按下时仍会循环。你需要在
else{}
块中播放声音。你可以通过处理OnKeyDown/Up事件在普通文本框上执行此操作,或者如果你多次使用文本框,那么你可以在主程序处理的块中触发自定义事件。我已经更新了代码,以显示事件句柄的示例。现在问题是如果你同时按下两个键,它们将无法播放完整和/或你按下1键,当它按下时,你按下另一个键,它将播放一部分声音,然后再次完整播放。这可能就是你播放声音的方式。事件触发一次的事实是TextBox的工作。如何处理声音类是不同的。也许你在重复使用相同的声音参考,所以旧的声音参考被扔掉了。