C# 计时器用法(DispatcherTimerSystem.Timers.TimerSystem.Threading.Timer)

Posted zebra-bin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 计时器用法(DispatcherTimerSystem.Timers.TimerSystem.Threading.Timer)相关的知识,希望对你有一定的参考价值。

首先,我觉得三种计时器最大的区别是:DispatcherTimer触发的内容会直接转到主线程去执行(耗时操作会卡住主线程),另外两个则是在副线程执行,如果需要修改界面,则需要手动转到主线程。

DispatcherTimer:

        DispatcherTimer _timer;
        public void TestDispatcherTimer()
        
            _timer = new DispatcherTimer();
            _timer.Interval = TimeSpan.FromSeconds(1);
            _timer.Tick += _timer_Tick;
            _timer.Start();
        
        private void _timer_Tick(object sender, EventArgs e)
        
            try 
            
                Trace.WriteLine("Test DispatcherTimer");
                _timer.Stop();
            
            catch (Exception ex)
            
                Trace.WriteLine("Error");
                _timer.Stop();
                _timer.Start();
            
                

System.Timers.Timer:

        System.Timers.Timer _timer;
        public void TestTimersTimer()
        
            _timer = new System.Timers.Timer();
            _timer.Interval = 1000; //单位毫秒
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
            _timer.Start();
        

        private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        
            try
            
                Trace.WriteLine("Test System.Timers.Timer");
                #region 此处展示的是把副线程的内容转到主线程
                System.Windows.Application.Current.Dispatcher.Invoke(
                         new Action(() =>
                         
                             Trace.WriteLine("同步切换");
                         ));
                System.Windows.Application.Current.Dispatcher.BeginInvoke(
                         new Action(() =>
                         
                             Trace.WriteLine("异步切换");
                         ));
                #endregion
                _timer.Stop();
            
            catch (Exception ex)
            
                Trace.WriteLine("Error");
                _timer.Stop();
                _timer.Start();
            
        

System.Threading.Timer:

        System.Threading.Timer _timer;
        private void TeseThreadingTimer()
        
            _timer = new System.Threading.Timer(new System.Threading.TimerCallback(Out), null, 0, 1000); //各参数意思详见:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.timer?redirectedfrom=MSDN&view=netframework-4.8
        
        private void Out(object sender)
        
            try
            
                Trace.WriteLine("Test System.Threading.Timer");
            
            catch (Exception ex)
            
                Trace.WriteLine("Error");
            
        
        private void Stop()
        
            _timer.Dispose();
        

 此处个人无关记载:Environment.TickCount 

以上是关于C# 计时器用法(DispatcherTimerSystem.Timers.TimerSystem.Threading.Timer)的主要内容,如果未能解决你的问题,请参考以下文章

c# wpf定时器的一种用法

C# 如何用计时器Timer控件实现停留几秒再做切换窗体的操作

怎么在C#中实现精确timer

vue时间倒计时-休眠用法/计时器用法

c#计时器如何保存计时

如何停止在 C# 类中运行的计时器