■ 시간 계수기를 사용하는 방법을 보여준다.
▶ TimeCounter.cs
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
using System; using System.Threading; namespace TestProject { /// <summary> /// 시간 계수기 /// </summary> public class TimeCounter { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 인스턴스 /// </summary> public static TimeCounter Instance => _instanceLazy.Value; #endregion //////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 인스턴스 LAZY /// </summary> private static readonly Lazy<TimeCounter> _instanceLazy = new Lazy<TimeCounter>(() => new TimeCounter()); #endregion ////////////////////////////////////////////////////////////////////////////////////////// Instance //////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 실행 여부 /// </summary> private bool isRunning = false; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region 현재 시간 - CurrentTime /// <summary> /// 현재 시간 /// </summary> public DateTime CurrentTime { get; private set; } = DateTime.Now; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Private #region 생성자 - TimeCounter() /// <summary> /// 생성자 /// </summary> private TimeCounter() { } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 시작하기 - Start() /// <summary> /// 시작하기 /// </summary> public void Start() { this.isRunning = true; new Thread(new ThreadStart(ProcessThread)).Start(); } #endregion #region 중단하기 - Stop() /// <summary> /// 중단하기 /// </summary> public void Stop() { this.isRunning = false; } #endregion ////////////////////////////////////////////////////////////////////////////////////////// Private #region 스레드 처리하기 - ProcessThread() /// <summary> /// 스레드 처리하기 /// </summary> private void ProcessThread() { CurrentTime = DateTime.Now; while(this.isRunning) { CurrentTime = CurrentTime.AddSeconds(0.1); Thread.Sleep(100); } } #endregion } } |
▶ Program.cs
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 |
using System; using System.Threading; namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { TimeCounter.Instance.Start(); for(int i = 0; i < 10; i++) { Console.WriteLine(TimeCounter.Instance.CurrentTime); Thread.Sleep(300); } TimeCounter.Instance.Stop(); } #endregion } } |