C#窗体中的计时器控件

本文关键字:计时器 控件 窗体 | 更新日期: 2023-09-27 18:27:49

我正在使用onkeyPress事件和计时器来执行一个方法。我有一个文本框,我想允许用户在文本框中键入他们的服务器名称。传统上,每次按键都会触发事件,但我把我的方法放在计时器运行事件中,并希望计时器只在用户等待5秒时触发操作。下面是我的计时器。

      private void tbServer_KeyPress(object sender, KeyPressEventArgs e)
      {
          //atimer.Stop();
          atimer = new System.Timers.Timer();
          atimer.Interval = 5000;
          atimer.AutoReset = false;
          if (atimer.Enabled)
          {
              return;
          }
          else
          {
              atimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
              atimer.Enabled = true;
          }
      }

从上面的内容来看,我希望我的计时器只有在计时器的另一个实例没有运行时才会触发经过的事件(即忽略计时器五秒间隔之前的任何按键)。在下面的已过计时器事件中执行完成后,我停止计时器

     private void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
     {
         if (ping(tbServer.Text, 1))
         {
             string txt = "Server Matched";
             SetText(txt, true);
             atimer.Enabled = false;
         }
         else
         {
              string txt = " Invalid Server Address";
              SetText(txt, false);
              atimer.Enabled = false;
          }
      }

无论情况如何,上述代码都会为每种钥匙类型引发计时器超时事件。当用户没有留出5秒的间隔时,我如何让它忽略按键类型?

C#窗体中的计时器控件

问题是,每次点击5秒后就会触发一个新的Timer实例。如果禁用/丢弃现有计时器,则其他计时器将停止。

  if (atimer != null)
  {
      atimer.Stop();
      atimer.Dispose();
      atimer = null;
  }
  atimer = new System.Timers.Timer();
  atimer.Interval = 5000;
  atimer.AutoReset = false;
  if (atimer.Enabled)
  {
      return;
  }
  else
  {
      atimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
      atimer.Enabled = true;
  }

每次按键都会制作一个新的计时器,

在为计时器分配新计时器之前,您需要检查计时器。

if(aTimer == null) 
{
    aTimer = new System.Timers.Timer();
    atimer.Interval = 5000;
    atimer.AutoReset = false;
}