C#3种常见的定时器(多线程)

总结以下三种方法,实现c#每隔一段时间执行代码:

方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间;
调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间 Thread thread = new Thread(new ThreadStart(obj.Method1)); thread.Start();
方法二:使用System.Timers.Timer类;
使用System.Timers.Timer类 System.Timers.Timer t = new System.Timers.Timer(100);
方法三:使用System.Threading.Timer;
using System;
using System.Threading;

class Program
{
static void Main(string[] args)
{
// 创建一个定时器
Timer timer = new Timer(TimerCallback, null, 0, 2000); // 每隔2000毫秒(2秒)执行一次

    Console.WriteLine("按任意键停止定时器...");
    Console.ReadKey();

    // 停止定时器
    timer.Dispose();
}

private static void TimerCallback(Object o)
{
    // 这里是定时执行的任务
    Console.WriteLine("定时任务执行: " + DateTime.Now);
}

}
总结:
另一种是System.Windows.Forms.Timer:这是一个专门为Windows Forms应用程序设计的定时器,用于定期执行任务并更新UI。它直接运行在UI线程上,因此可以直接在事件处理方法中获取和修改UI元素而不会出现问题。但是需要注意的是,由于它运行在UI线程上,如果定时器事件处理方法执行时间过长,会影响UI的响应性。因此,在使用Windows Forms Timer时需要注意控制事件处理方法的执行时间,避免阻塞UI线程。
方法二:System.Timers.Timer:这是一个后台线程的定时器,用于在服务器端执行周期性任务。它不会阻塞UI线程,因此适合在需要执行长时间运行的任务时使用。其优点是能够在后台线程上执行任务,而不会影响UI的响应性。但是需要注意的是,由于它运行在后台线程上,因此不能直接在事件处理方法中更新UI元素,需要通过委托或线程安全的方式来操作UI。

方法三:System.Threading.Timer:这是一个更通用的定时器,用于在指定的线程上调度任务。它可以设置回调方法,并指定初始等待时间和间隔时间。它适用于在多线程环境中使用,可以在非同步上下文中定期执行任务。由于Timer运行在指定的线程上,因此可以用来在指定的线程上调度任务。但是需要注意的是,如果回调方法中需要更新UI元素,也需要使用委托或线程安全的方式来操作UI。

总体而言,选择使用哪种定时器取决于您的应用程序类型、需求和运行环境。需要根据实际情况选择最适合的定时器来实现所需的功能

posted @ 2024-03-12 09:29  匠心灵域  阅读(1490)  评论(0编辑  收藏  举报