반응형

* C# 시간 체크 (Time Check) 예제...

 

메인화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_TimeCheck
{
    public partial class Form1 : Form
    {
        bool bClick = false;
        DateTime dtClick ;

        bool bThread = true;
        System.Threading.Thread thMain;

        public Form1()
        {
            InitializeComponent();

            //크로스 스레드 오류 방지
            CheckForIllegalCrossThreadCalls = false;

            thMain = new System.Threading.Thread(new System.Threading.ThreadStart (Thread_Tick));

			//1. 첫번째 방법 : 스레드
            //이 스레드를 백그라운드로 지정 할 것인지 포어 그라운드로 지정 할 것인지...
            //true: 백그라운드 스레드 , false: 포어그라운드
            //기본은 false 포어그라운드
            //thMain.IsBackground = true;
            thMain.Start();
            
            //2. 두번째 방법 : 윈도우 타이머
            //타이머가 돌아가는 시간
            //timer1.Interval  = 300;
            //timer1.Start();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            //스레드 객체가 null 이 아니면...
            bThread = false;
            
            if (thMain != null)
            {
                //스레드가 돌아가고 있으면
                if (thMain.IsAlive)
                {
                    //강제 종료
                    thMain.Abort();
                }

                thMain = null;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dtClick = DateTime.Now;
            bClick = true;
        }

        private double After_Time(DateTime dtNow, DateTime dtBefore)
        {
            TimeSpan ts = dtNow - dtBefore;
            return ts.TotalSeconds;
        }

		//스레드 이벤트...
        void Thread_Tick()
        {
            while (bThread)
            {
                if (bClick)
                {
                    label1.Text = string.Format("{0:##0}", After_Time(DateTime.Now, dtClick));
                }


                System.Threading.Thread.Sleep(100);
            }
        }
        
        //타이머 이벤트...
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (bClick)
            {
                label1.Text = string.Format("{0:##0}", After_Time(DateTime.Now, dtClick));
            }
        }

    }
}

* 예제 결과 

 

 

 

 

https://kdsoft-zeros.tistory.com/22

 

[C#] 크로스 스레드 (Cross Thread) 예제

* 크로스 스레드 - 자신의 스레드가 아닌 다른 스레드가 그 컨트롤에 접근했었을 때 발생하는 오류 * 해결 방법 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts