C#Keydown/Keyevents(如果没有按键)

本文关键字:如果没有 Keyevents C#Keydown | 更新日期: 2023-09-27 18:30:09

我现在正在c#中编程,试图将控制台应用程序"转换"为windows Forms应用程序,我想做以下事情:

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

基本上询问是否有一段时间没有按键睡眠,然后this.close();

这样,如果没有按键,就做点什么。。。我就是不能让它工作。如果能得到一些帮助,我将不胜感激D

C#Keydown/Keyevents(如果没有按键)

如果未按下任何键,则不会引发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
    }  
}