0

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;
          }
      }

上記から、タイマーの別のインスタンスが実行されていない場合にのみ、タイマーで経過イベントを発生させたい (つまり、タイマーの 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 秒間隔を空けなかったときにキーの種類を無視するにはどうすればよいですか?

4

2 に答える 2

0

問題は、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;

  }
于 2013-08-16T04:18:53.060 に答える
0

キーを押すたびに新しいタイマーを作成し、

新しいタイマーを割り当てる前に aTimer を確認する必要があります。

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

}
于 2013-08-16T04:02:10.200 に答える