집 >백엔드 개발 >C#.Net 튜토리얼 >C#Win32 콘솔 스레드 타이머 코드 예제에 대한 자세한 소개
C#에서는 세 가지 유형의 타이머가 제공됩니다.
1. Windows 기반 표준 타이머(System.Windows.Forms.Timer)
2. 서버 기반 타이머(System.Timers.Timer)
3. 스레드 타이머(System.Threading.Timer)
1. Windows 기반 표준 타이머(System.Windows.Forms.Timer)
가장 먼저 알아두셔야 할 점 Windows 타이머는 단일 스레드 환경을 위해 설계되었습니다
이 타이머는 버전 1.0부터 Visual Basic에 존재했으며 기본적으로 변경되지 않았습니다
이 타이머가 사용됩니다. 가장 간단한 것은 도구 상자의 Timer 컨트롤을 폼으로 끌어서 놓기만 하면 됩니다. , 이벤트 및 간격 속성을 설정합니다.
2. 서버 기반 타이머(System .Timers.Timer)
System.Timers.Timer는 의존하지 않습니다. 스레드 풀에서 스레드를 깨웁니다. 서버 환경에서 실행되도록 최적화된 기존 타이머의 업데이트 버전입니다. VS2008의 도구 상자는 기성 컨트롤을 제공하지 않으며 이 타이머를 사용하려면 수동으로 코딩해야 합니다.
3. 스레드 타이머(System.Threading.Timer)
스레드 타이밍 타이머도 폼에 의존하지 않으며 콜백을 사용하는 간단하고 가벼운 타이머입니다. 이벤트 대신 메서드를 사용하며 스레드 풀 스레드에서 지원됩니다. 스레드 타이머는 스레드에서 메시지가 전송되지 않는 시나리오에서 유용합니다.
여기서는 콘솔 스레드 타이머 사용에 대한 코드 예제만 제공합니다. 몇 가지 다른 코드 예제는 나중에 제공됩니다.
using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.Threading; /************************************************************************/ /* CSharp控制台线程计时器代码示例 * Powered by:testcs_dn * Blog:http://www.php.cn/ */ /************************************************************************/ namespace CSharp控制台线程计时器代码示例 { /// <summary> /// 控制台线程计时器代码示例 /// 这里展示了Windows API SetConsoleCtrlHandler函数的应用,同时展示了线程计时器的使用; /// Author:testcs_dn /// Date:2015-01-03 /// </summary> class Program { /// <summary> /// 计时器回调函数,在这里处理计时时间是否到达的判断以及要做的事情; /// </summary> /// <param name="obj"></param> public static void workOvertimeTimerCallback(object obj) { DateTime dt = DateTime.Now; if (dt.Hour == 16 && dt.Minute > 0) { Console.WriteLine("ok"); } } //计时器变量 public static System.Threading.Timer workOvertimeTimer = null; //定义处理程序委托 delegate bool ConsoleCtrlDelegate(int dwCtrlType); const int CTRL_CLOSE_EVENT = 2; //导入SetCtrlHandlerHandler API [DllImport("kernel32.dll")] private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); static void Main(string[] args) { ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine); if (SetConsoleCtrlHandler(newDelegate, true)) { //初始化计时器 workOvertimeTimer = new System.Threading.Timer(new TimerCallback(workOvertimeTimerCallback), null, 1000, 10000); //这里执行你自己的任务,我举例输出“...”,为了展示长时间的任务,我用了一个死循环; //避免输出太多,使用了Sleep; //注意:Sleep的时间不可太长,否则可能影响Console.ReadKey(),导致不能接收用户输入; while (true) { Console.WriteLine("..."); Thread.Sleep(100); } } else { Console.WriteLine("抱歉,API注入失败,按任意键退出!"); Console.ReadKey(); } } /// <summary> /// 处理程序例程,在这里编写对指定事件的处理程序代码 /// </summary> /// <param name="CtrlType"></param> /// <returns></returns> static bool HandlerRoutine(int CtrlType) { switch (CtrlType) { case CTRL_CLOSE_EVENT: //用户要关闭Console了 Console.WriteLine(); Console.WriteLine("任务还没有完成,确认要退出吗?(Y/N)"); ConsoleKeyInfo ki = Console.ReadKey(); return ki.Key == ConsoleKey.Y; default: return true; } } } }
위 내용은 C#Win32 콘솔 스레드 타이머 코드 예제에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!