본문 바로가기

.NET/C# Form

C# 타이머(Timer)와 프로그레스바(ProgreeBar)

반응형




타이머 Timer

타이머 컨트롤은 정해진 시간 간격마다 어떤 코드를 실행할 때 사용합니다
타이머가 시작되면 일정 시간 간격으로 지정한 메서드를 불러줍니다

속성                                    설명
Enabled                           타이머 시작/멈춤을 지정합니다
                                                 ex) timer1.Enabled = true;
Interval                            서드를 불러주는 시간 간격을 지정합니다. millisec 단위합니다(초기값:100)
                                                  예) titmer1.Interval = 500;
Start                                타이머를 시작합니다           예) timer1.Start();
Stop                                  타이머를 멈춥니다              예) timer1.Stop();



Enable 속성에  true 값을 넣으면 Start 메서드가 불려져 타이머가 시작됩니다 반대로 false값을 넣으면
Stop 메서드가 불려져 타이머가 멈춥니다
Enable 값을 검사해서 타이머가 시작 여부를 알수 도 있습니다


if(Enabled)
{
// 타이머가 시작된 경우
}

Timer 컨트롤의 Tick이벤트 타이머를 시작했을때 주기적으로 발생하는 이벤트입니다
이벤트 발생할때마다 불려질 이벤트 핸들러를 구현합니다

private void titmer1_Tick(object sender, System.EventArgs e)
{
// 일정 시간 간격으로 실행될 코드




프로그레스바 ProgressBar

프로그레스바 컨트롤은 시간이 오래 걸리는 어떤 작업을 할대, 사용자에게 현재 진행 정도를
알려줄  떄 사용합니다. 윈도우에서 파일을 복사하거나 웹에서 파일을 다운로드 받을 떄 많이
볼 수 있는 컨트롤로 사용자에게 지루함을 덜어주면서 계속 실행되고 있을을 알려줍니다



예를 들면 네트워크를 통해서 파일을 다운로드 받는다거나 VS.NET과 같은 큰 프로그램을 설치할때
현재 진행 상황과 함께 앞으로 남은 시간을 계산해서 보여줍니다
이렇게 오랜 시간이 걸리는 작업을 할 때 사용자에게 얼마나 진행되었으며 남은 시간이
얼마나 되는지 알려줄 수 있습니다

* 다음은 ProgressBar 컨트롤의 주요 속성합니다

속성                                        설명
Minimum                     프로그레스 컨트롤에서 처음 시작값입니다.
                                    ex) progressBar1.Minimum = 0;
Maxmum                     프로그레스 컨트롤에서 맨 마지막 값입니다.
                                    ex) progressBar1.Maxmum = 100;
Step                            값의 증가치를 가지고 있습니다.
                                    ex) progressBar1.Step = 10;
Value                           현재 값을 알려 줍니다
                                    ex) label1.Text = value.Tostring()+"%";




따라하기

타이머를 이용해서 프로그레스바를 조금씩 증가시키는 예제입니다
여러개의 파일을 다운로드받는다고 가정하고, 전체 파일에 대한 다운로드 퍼센트와
각 파일에 대한 다운로드 퍼센트를 보여줍니다
프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다



다음과 같이 폼 윈도우를 구성하고 컨트롤 속성을 지정합니다





 객체 객체이름  속성지정 

Buton

Lable
Lable

ProgressBar
ProgressBar

Timer

 Button

Lable1
Lable2

ProgressBar1
ProgressBar2

timer1

Text = “다운로드”

Text = “전체 파일 : 0%;
Text = “파일 : 0%”

Minimum = 0 ,Maximum = 100
Minimum = 0, Maximum = 100

Interval = 100



다운로드 시작 버튼의 Click 이벤트 핸들러를 구현합니다
타이머가 실행된 상태와 아닌 상태를 구분해서 구현해줍니다

 public partial class Form1 : Form
 {
  public Form1()
  {
   InitializeComponent();
  }

  private void button_Click(object sender, EventArgs e)
  {
   if (timer1.Enabled)// 타이머가 ON 되어 있으면,
   { 
    timer1.Stop();// 타이머 멈춤
    button.Text = "다운로드 시작";
    // 사용자가 타이머를 시작할수 있도록 "시작"으로바꿈
   }
   else//타이머가 off 상태이면
   {
    //타이머 시작
    timer1.Start();
    //사용자가 타이머를 멈출 수 있도록 "멈춤으로 바꿈
    button.Text = "다운로드 멈춤";
   }
  }
 }


Timer1 컨트롤을 더블클릭하면 Tick 이벤트 핸들러가 추가됩니다
추가된 이벤트 핸들러에 다음과 같이 구현합니다




  private void timer1_Tick(object sender, EventArgs e)
  {
   // 각 파일 진행 퍼센트
   if (progressBar2.Value < progressBar1.Maximum)
    progressBar2.Value += 20;
   else
   {
    // 전체 파일에 대한 진행 퍼센트
    if (progressBar1.Value < progressBar1.Maximum)
    {
     progressBar1.Value += 20;
     progressBar2.Value = 0;
    }
    else
    {
     //전체 파일 다운로드 끝남 초기화
     timer1.Stop();
     button.Text = "다운로드 시작";

     progressBar1.Value = 100;
     progressBar2.Value = 100;
    }
    label1.Text = "전체 파일 : " + progressBar1.Value.ToString() + "%";
   }
    label2.Text = "파일 : " + progressBar2.Value.ToString() + "%";
  }