如何在C#的时间范围内检查事件是否发生?

时间:2015-04-12 14:38:39

标签: c#

我正在开发软件,如果单击一个按钮5次,则变量增加“1”

如果是A然后B ++

一切都很好,但现在我希望系统重置其计数器,如果5次没有在10秒内发生。即点击事件的速度。

如果我点击太慢,即使我点击了5次超过10秒的时间,也不会发生增量。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

这可以做得更好,但应该有效:

 DateTime time = new DateTime();//time of first click
 int counter = 0;

void button_click(object sender, EventArgs e)
{
    if(counter == 0)
    {time = DateTime.Now}
    else if(counter == 5)
    {
         if( DateTime.Now.Subtract(time).Duration().Seconds <= 10)
         {/*Do some cool stuff*/}
         else
         {counter = -1;}
    }
    counter++;
}

答案 1 :(得分:0)

我会做这样的事情:

const int ClicksRequired = 5;
readonly TimeSpan ClickTimeSpan = new TimeSpan(0, 0, 10);

Queue<DateTime> _clicks = new Queue<DateTime>();

private void clickTarget_MouseUp(object sender, MouseEventArgs e)
{
    var currentTime = DateTime.Now;
    _clicks.Enqueue(currentTime);

    if (_clicks.Count == ClicksRequired)
    {
        var firstTime = _clicks.Dequeue();
        if (currentTime - firstTime <= ClickTimeSpan)
        {
            MessageBox.Show("Hello World!");
            _clicks.Clear();
        }
    }
}

我使用队列来跟踪点击次数,因为在时间窗口中有五次点击之前,您不知道哪个鼠标点击实际上是第一次点击。您需要及时了解第五次点击的时间,并且每次后续点击都会发生更改。

我使用MouseUp而不是Click,因为如果在系统双击间隔内发生点击,则点击可能不会触发正确的次数(因为这些会被路由到DoubleClick)。