C#windows窗体中的计时器控件

C#windows窗体中的计时器控件,c#,timer,windows-forms-designer,C#,Timer,Windows Forms Designer,我使用onkeyPress事件和计时器来执行一个方法。我有一个文本框,我想允许用户在文本框中键入他们的服务器名称。传统上,每次按键都会触发事件,但我将我的方法放在timer Expressed events中,希望计时器仅在用户等待5秒钟时触发操作。下面是我的计时器 private void tbServer_KeyPress(object sender, KeyPressEventArgs e) { //atimer.Stop();

我使用onkeyPress事件和计时器来执行一个方法。我有一个文本框,我想允许用户在文本框中键入他们的服务器名称。传统上,每次按键都会触发事件,但我将我的方法放在timer Expressed events中,希望计时器仅在用户等待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;
          }
      }
综上所述,我希望我的计时器仅在计时器的另一个实例未运行时触发已用事件(即忽略计时器间隔5秒之前的任何按键)。在下面的已用计时器事件中执行完成后,我停止计时器

     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秒的时间间隔时,如何使其忽略按键类型?

您可以在每次按键时创建一个新计时器

您需要先检查aTimer,然后再为其分配新计时器

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

}

问题是,每次单击5秒后触发时,您都会创建一个新的计时器实例。如果禁用/处置现有计时器,其他计时器将停止

  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;

  }

谢谢基思先生的快速回复。我应用你说的如下。我意识到当一个用户在不等待5秒的范围内键入10个字符时。它发射了三次,而不是以前的十次。我所做的是在代码下面添加我的if/else。并将else添加到您的if中,并再次执行我的if/else。