C#--使用Timer类和Join方法管理线程

简介: Timer类允许将"fire-and-forget"线程添加到用户程序。在实例化Timer对象时,需要指定以下4个参数 callback  提供Timer将调用方法的TimerCallback委托 state  应该传递给TimerCallback方法的对象。

Timer类允许将"fire-and-forget"线程添加到用户程序。在实例化Timer对象时,需要指定以下4个参数

  • callback  提供Timer将调用方法的TimerCallback委托
  • state  应该传递给TimerCallback方法的对象。这个参数可为null
  • dueTime  Timer首次激发之前延迟的毫秒数
  • Period  Timer调用之间的毫秒数。

以下为Timer的一个示例:

 
 
1 /*
2 Example14_5.cs illustrates the use of the Timer class
3   */
4
5   using System;
6   using System.Threading;
7
8 class Example14_5
9 {
10
11 // the CheckTime method is called by the Timer
12 public static void CheckTime(Object state)
13 {
14 Console.WriteLine(DateTime.Now);
15 }
16
17 public static void Main()
18 {
19
20 // create the delegate that the Timer will call
21 TimerCallback tc = new TimerCallback(CheckTime);
22
23 // create a Timer that runs twice a second, starting in one second
24 Timer t = new Timer(tc, null , 1000 , 500 );
25
26 // Wait for user input
27 Console.WriteLine( " Press Enter to exit " );
28 int i = Console.Read();
29
30 // clean up the resources
31 t.Dispose();
32 t = null ;
33
34 }
35
36 }

Thread.Join方法允许“持有” 某个线程,直至另一个线程完成其工作。如:

 
 
1 /*
2 Example14_6.cs shows the Thread.Join method in action
3 */
4
5 using System;
6 using System.Threading;
7
8 class Example14_6
9 {
10
11 // the Countdown method counts down from 1000 to 1
12 public static void Countdown()
13 {
14 for ( int counter = 1000 ; counter > 0 ; counter -- )
15 {
16 Console.Write(counter.ToString() + " " );
17 }
18 }
19
20 public static void Main()
21 {
22
23 // create a second thread
24 Thread t2 = new Thread( new ThreadStart(Countdown));
25
26 // launch the second thread
27 t2.Start();
28
29 // block the first thread until the second is done
30 t2.Join();
31
32 // and call the Countdown method from the first thread
33 Countdown();
34
35 }
36
37 }
相关文章
|
3月前
|
Java
【JavaEE】——多线程常用类
Callable的call方法,FutureTask类,ReentrantLock可重入锁和对比,Semaphore信号量(PV操作)CountDownLatch锁存器,
|
3月前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
3月前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
3月前
|
安全 Java API
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程
|
4月前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
4月前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
145 3
|
4月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
5月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
51 2
|
5月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
105 2
|
4月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
71 3