C#Keydown / Keyevents如果没有按下键

时间:2012-04-05 06:25:56

标签: c# keypress keydown keyevent keyeventargs

我正在c#中编写一些东西,尝试将控制台应用程序“转换”为Windows Forms应用程序,我想做类似以下的事情:

if("keypress == nokey") 
{
    system.threading.thread.sleep ***
}
while(nokeyispressed) 
{
    system.threading...
}

基本上询问是否按下了一段时间没有按键睡眠和this.close();

这样如果没有按下按键,那就做点什么...... 我无法让它发挥作用。 我会非常感谢一些帮助......:D

1 个答案:

答案 0 :(得分:1)

如果没有按下任何键,则不会引发KeyDown事件。因此,不会调用您的处理程序。

UPDATE(删除了循环的选项,因为定时器会在不同的线程上使用与睡眠超时相同的循环):

这是带有计时器的示例:

private bool _keyPressed;

private void TimerElapsed(object sender, EventArgs e)
{
    if (!_keyPressed)
    {
        // do what you need
    }
}

private void KeyDownHandler(object sender, KeyEventArgs e)
{
    _keyPressed = true;

    switch (e.KeyCode)
    {
        // process pressed key
    }

    _keyPressed = false;
} 

更新:我认为最好在确定是否没有按键之前验证自上次按键以来经过了多少时间

private DateTime _lastKeyDownTime;
private const int interval = 100;

private void LoadHandler(object sender, EventArgs e)
{
 // start Threading.Timer or some other timer
 System.Threading.Timer timer = new System.Threading.Timer(DoSomethingDefault, null, 0, interval);
}   

private void DoSomethingDefault(object state)
{
    if ((DateTime.Now - _lastKeyDownTime).TotalMilliseconds < interval)                            
        return;            

    // modify UI via Invoke
}

private void KeyDown(object sender, KeyEventArgs e)
{
    _lastKeyDownTime = DateTime.Now;

    switch (e.KeyCode)
    {
        // directly modify UI
    }  
}