> 백엔드 개발 > C#.Net 튜토리얼 > C#Win32 콘솔 스레드 타이머 코드 예제에 대한 자세한 소개

C#Win32 콘솔 스레드 타이머 코드 예제에 대한 자세한 소개

黄舟
풀어 주다: 2017-03-11 13:46:05
원래의
1155명이 탐색했습니다.

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)
스레드 타이밍 타이머도 폼에 의존하지 않으며 콜백을 사용하는 간단하고 가벼운 타이머입니다. 이벤트 대신 메서드를 사용하며 스레드 풀 스레드에서 지원됩니다. 스레드 타이머는 스레드에서 메시지가 전송되지 않는 시나리오에서 유용합니다.

여기서는 콘솔 스레드 타이머 사용에 대한 코드 예제만 제공합니다. 몇 가지 다른 코드 예제는 나중에 제공됩니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

using System;

using System.Collections.Generic;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading;

 

/************************************************************************/

/* CSharp控制台线程计时器代码示例

 * Powered by:testcs_dn

 * Blog://m.sbmmt.com/

 */

/************************************************************************/

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿