WindowFormタイマー制御

タイマーコンポーネントタイマータイマー間隔時間-この間隔ごとにイベントがトリガーされます

いちSystem.Windows.Forms.TimerWindows
アプリケーションは、UI
属性間隔時間間隔ms 1000ms = 1s
イベントティック
アプリケーションに基づいて、UI要素を変更するスレッドを占有します。動的時間表示
Windowsアプリケーションの場合は、タイマー機能システムを使用します。 Windows.Forms.Timerが最初の選択肢です。

//每隔指定的时间间隔就会触发
  private void timer1_Tick(object sender, EventArgs e)
   {
    
    
       lblDateTime.Text = DateTime.Now.ToString();
   }

   private void FrmTimer_Load(object sender, EventArgs e)
   {
    
    
       lblDateTime.Text = DateTime.Now.ToString();
       timer1.Enabled = true;	//启动计时器
   }

単一の実行時間が間隔時間を超えると、次のトリガーに影響します。精度が悪い。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・·················································· ···サービスに基づく
System.Timers.Timer
タイマーは軽量であり、
Elapsedイベントは時間間隔でトリガーさます-操作が実行されます-UIスレッドによって実行されません

プロパティ
間隔時間間隔
AutoResetfalseは、trueになるとトリガーされると停止します。デフォルトでは、UI要素
直接変更する
ことできません。UI要素のinvoke()を介して行うことができUI要素はデリゲートで変更されます- --UI要素を変更します

private void FrmTimer_Load(object sender, EventArgs e)
  {
    
    
      System.Timers.Timer timer3 = new System.Timers.Timer();
      timer3.Interval = 1000;
      //timer3.AutoReset = false;		//只会引发一次,就停止了
      timer3.Elapsed += Timer3_Elapsed; //事件
      timer3.Start(); 					//开启计时器
  }
  int count = 0; //触发次数的终点
  private void Timer3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  {
    
    
	  //不能直接修改UI元素的内容
      //lblDt2.Text= DateTime.Now.ToString();
      count += 1;
	  //用委托来进行修改元素内容
      Action act = UpdateTime;
      this.Invoke(act);
      if(count >10)
      {
    
    
          System.Timers.Timer timer = (System.Timers.Timer)sender;
          timer.Stop();			//停止计时器
      }
  }
//委托方法
  private void UpdateTime()
  {
    
    
      lblDatatime.Text = DateTime.Now.ToString();
  }

時間のかかる操作は、UIが応答しなくなることはなく、次のトリガーに影響を与えません

おさんSystem.Threading.Timer
マルチスレッドタイマーは軽量で高精度

指定された時間間隔でスレッドプールスレッドでメソッドを実行するためのメカニズムを提供します。
1回の実行が長すぎるため、次のトリガーには影響しません。コールバックメソッドが操作を実行します。

//System.Threading.Timer timer4;     
 private void FrmTimer_Load(object sender, EventArgs e)
  {
    
    
      //多线程
      //period  时间间隔  0或-1 只会执行一 次,然后就停止
      //Change 可以让计时器重新启动
      //停止 ①period  0 -1   ②timer4.Dispose() 
      int count2 = 0;
      timer4 = new System.Threading.Timer(new System.Threading.TimerCallback(o => {
    
    
          count2 += 2;
          Action<int> act = ShowCount;
          this.Invoke(act, count2);
      }), null, 1000,1000);
	//参数 回调函数,执行对象,延迟启动时间,触发时间间隔
   //timer4.Change(2000, 2000);	//改变延迟启动时间和时间间隔
  }
//委托函数
  private void ShowCount(int cout)
  {
    
    
      txtCount.Text = cout.ToString();
      if (cout > 50)
          timer4.Dispose();
  }

UI要素を直接変更することはできません。また、UIスレッドで実行されているUI要素のinvoke()によって実装することもできません。

おすすめ

転載: blog.csdn.net/asdasd1fdsyrt/article/details/109477081