在KeyEvent内的条件上设置xTime

时间:2014-07-28 04:50:35

标签: c# winforms

有没有办法可以设置一个条件,按下键后如果已经过了5秒,那么将执行某个方法。

例如我在gridview中有keyup事件:

private void Grid_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
    }
    else 
    {
        if (atimehasalreadypassed == 5seconds)
        {
           //execute
        }
    } 
}

这个问题是计数可能在传递keyDown后开始,所以它只有1秒。 所以我需要在U.I线程/背景线程之外的一些计数......

注意:我不需要延迟,我只需要知道keyEvent后是否已经过了5秒......

1 个答案:

答案 0 :(得分:1)

这可能就是您所需要的:

    private void Grid_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
        }
        else 
        {
            if (SecondsPassed(5))
            {
               //execute
            }
        } 
    }

    private DateTime _lastCallTime = new DateTime();
    private bool SecondsPassed(double seconds)
    {
        // calculate time difference
        var timeSpan = new TimeSpan(DateTime.Now.Ticks - _lastCallTime.Ticks);
        // reset timing
        _lastCallTime = DateTime.Now;

        if (timeSpan.TotalSeconds > seconds)
        {
            return true;
        }
        return false;
    }

请注意,您可能希望初始化" _lastCallTime"手动,取决于您的使用情况。