Detaillierte Einführung in das C#Win32-Konsolen-Thread-Timer-Codebeispiel

黄舟
Freigeben: 2017-03-11 13:46:05
Original
1074 Leute haben es durchsucht

Drei Arten von Timern werden in C# bereitgestellt:
1. Windows-basierter Standard-Timer (System.Windows.Forms.Timer)
2. Serverbasierter Timer (System.Timers. Timer)
3. Thread-Timer (System.Threading.Timer)
1. Windows-basierter Standard-Timer (System.Windows.Forms.Timer)
Das Erste, was Sie beachten sollten ist, dass Windows-Timer für Single-Thread-Umgebungen konzipiert sind
Dieser Timer existiert in Visual Basic seit Version 1.0 und ist grundsätzlich unverändert
Dieser Timer wird verwendet. Am einfachsten ist es, einfach das Timer-Steuerelement in der Toolbox auf das Formular zu ziehen , und legen Sie dann die Ereignis- und Intervalleigenschaften fest.
2. Serverbasierter Timer (System .Timers.Timer)
System.Timers.Timer ist nicht darauf angewiesen Es handelt sich um eine aktualisierte Version des herkömmlichen Timers, die für die Ausführung in einer Serverumgebung optimiert ist. Zur Verwendung dieses Timers sind keine vorgefertigten Steuerelemente erforderlich
3. Thread-Timer (System.Threading.Timer)
Thread-Timing Der Timer basiert auch nicht auf Formularen, sondern ist ein einfacher, leichter Timer, der Rückrufe verwendet Methoden anstelle von Ereignissen und wird von Thread-Pool-Threads unterstützt. Thread-Timer sind in Szenarien nützlich, in denen Nachrichten nicht in einem Thread gesendet werden.

Hier geben wir nur Codebeispiele für die Verwendung von Konsolen-Thread-Timern. Weitere Codebeispiele folgen später:

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;
            }
        }
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in das C#Win32-Konsolen-Thread-Timer-Codebeispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!