c# 多线程之-- System.Threading Timer的使用

作用:每隔多久去执行线程里的方法.

class ThreadTimerDemo
    {
        static void Main(string[] args)
        {
            // Create an AutoResetEvent to signal the timeout threshold in the
            // timer callback has been reached.
            var autoEvent = new AutoResetEvent(false);

            var statusChecker = new StatusChecker(10);

            // Create a timer that invokes CheckStatus after one second,
            // and every 1/4 second thereafter.
            Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
                              DateTime.Now);
            var stateTimer = new Timer(statusChecker.CheckStatus,
                                       autoEvent, 1000, 250);

            // When autoEvent signals, change the period to every half second.
            autoEvent.WaitOne();
            stateTimer.Change(0, 500);
            Console.WriteLine("\nChanging period to .5 seconds.\n");

            // When autoEvent signals the second time, dispose of the timer.
            autoEvent.WaitOne();
            stateTimer.Change(0, 1000);
            Console.WriteLine("\nChanging period to 1 seconds.\n");
            autoEvent.WaitOne();
            stateTimer.Dispose();
            Console.WriteLine("\nDestroying timer.");
            Console.ReadKey();
        }
        class StatusChecker
        {
            private int invokeCount;
            private int maxCount;

            public StatusChecker(int count)
            {
                invokeCount = 0;
                maxCount = count;
            }

            // This method is called by the timer delegate.
            public void CheckStatus(Object stateInfo)
            {
                AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
                Console.WriteLine("{0} Checking status {1,2}.",
                    DateTime.Now.ToString("h:mm:ss.fff"),
                    (++invokeCount).ToString());

                if (invokeCount == maxCount)
                {
                    // Reset the counter and signal the waiting thread.
                    invokeCount = 0;
                    autoEvent.Set();
                }
            }
        }
    }
// The example displays output like the following:
//       11:59:54.202 Creating timer.
//
//       11:59:55.217 Checking status  1.
//       11:59:55.466 Checking status  2.
//       11:59:55.716 Checking status  3.
//       11:59:55.968 Checking status  4.
//       11:59:56.218 Checking status  5.
//       11:59:56.470 Checking status  6.
//       11:59:56.722 Checking status  7.
//       11:59:56.972 Checking status  8.
//       11:59:57.223 Checking status  9.
//       11:59:57.473 Checking status 10.
//
//       Changing period to .5 seconds.
//
//       11:59:57.474 Checking status  1.
//       11:59:57.976 Checking status  2.
//       11:59:58.476 Checking status  3.
//       11:59:58.977 Checking status  4.
//       11:59:59.477 Checking status  5.
//       11:59:59.977 Checking status  6.
//       12:00:00.478 Checking status  7.
//       12:00:00.980 Checking status  8.
//       12:00:01.481 Checking status  9.
//       12:00:01.981 Checking status 10.
//
//       Destroying timer.

.NET 包括四个类名为Timer,每个的它提供了不同的功能:

  • System.Timers.Timer它触发事件并执行的代码中一个或多个事件接收器按固定间隔。 类适用于作为基于服务器的使用或在多线程环境; 中的服务组件它没有用户界面并不是在运行时中可见。
  • System.Threading.Timer其中按固定间隔在线程池线程上执行的单个回调方法。 当计时器实例化,并且不能更改定义的回调方法。 如System.Timers.Timer类,此类旨在为基于服务器或服务组件在多线程环境中使用; 它没有用户界面并不是在运行时中可见。
  • System.Windows.Forms.Timer (仅在.NET framework 中),触发事件并在固定时间间隔的一个或多个事件接收器中执行代码的 Windows 窗体组件。 该组件没有用户界面,专供在单线程环境中;它在 UI 线程上执行。
  • System.Web.UI.Timer (仅在.NET framework 中),按固定时间间隔执行异步或同步网页回发的 ASP.NET 组件。

原文地址:https://www.cnblogs.com/25miao/p/10398403.html

时间: 2024-12-11 12:55:14

c# 多线程之-- System.Threading Timer的使用的相关文章

C#多线程 定时重复调用异步线程即System.Threading.Timer类使用小例

1.System.Threading.Timer计时器提供了一种重复调用异步线程的方法..Net BCL中有多个Timer类,如用于Windows应用程序的System.Windows.Forms.Timer类,如可以运行在用户接口线程或工作线程上的System.Timers.Timer类.它们是很不一样的,这里要讲的System.Threading.Timer类是一种定时调用某个异步线程的类.每次计时器到设定的时间,系统就去线程池中开启一个线程运行提供的回调方法. 2.调用这个Timer类的重

System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用

一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler.在这种Timer的EventHandler中可 以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的. 2.它是一个基于Form的计时器3.创建之后,你可以使用Interval设置Tick之间的跨

例说定时器System.Threading.Timer

本文通过实例演示System.Threading.Timer的使用方法. 下面是完整的实例代码. using System; using System.Windows; namespace ThreadingTimerExp { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { System.Threading.Timer timer;

System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer

System.Windows.Forms.Timer.System.Timers.Timer.System.Threading.Timer的 区别和用法System.Windows.Forms.Timer执行的时候,如果你在过程中间加一个sleep整个的界面就死掉了,但是另外两个没有这个情况,System.Timers.Timer.System.Threading.Timer!System.Timers.Timer.System.Threading.Timer这两个平时用的时候没有发现太大的区别

System.Threading.Timer

GLog.WLog("_thdTimer before"); _thdTimer = new System.Threading.Timer(new TimerCallback(TimerProc)); //2秒后开始执行计时器:每3秒执行一次 _thdTimer.Change(2000,3000); GLog.WLog("_thdTimer after"); private void TimerProc(object state) { try { GLog.WLog

System.Threading.Timer 用法

System.Threading.Timer用法和例子 (1)首先声明Timer变量://一定要声明成局部变量以保持对Timer的引用,否则会被垃圾收集器回收!private System.Threading.Timer timerClose; (2)在上述自动执行代码后面添加如下Timer实例化代码:// Create a timer thread and start ittimerClose = new System.Threading.Timer(new TimerCallback(tim

当时钟事件声明为过程变量 让system.threading.timer时钟失效

这个项目的小模块就是画label 控件到tablepayoutpanel表单 之中, 中间用到了时钟,事件(带返回值的),哈希表 .由于时钟定义在 form1的启动构造函数中导致了form1,启动完毕之后时钟停止运行,结果画label画到一半就停了,查找问题,甚是头大,后经大神帮忙,发现了过程变量的问题,在此总结.主要看红字标出部分 public Form1() { InitializeComponent(); //声明启动绑定事件 // OneCodeEventClass edt = new

C# 计时器用法(DispatcherTimer、System.Timers.Timer、System.Threading.Timer)

首先,我觉得三种计时器最大的区别是:DispatcherTimer触发的内容会直接转到主线程去执行(耗时操作会卡住主线程),另外两个则是在副线程执行,如果需要修改界面,则需要手动转到主线程. DispatcherTimer: DispatcherTimer _timer; public void TestDispatcherTimer() { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromSeconds(1); _t

例说多线程定时器System.Timers.Timer

System.Timers.Timer是多线程定时器,如果一个Timer没有处理完成,到达下一个时间点,新的Timer同样会被启动,所以在使用Timer时需要注意. 下面的实例显示了Timer的使用方法. using System; using System.Threading; using System.Windows; namespace TimerExp { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> publ