블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

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

Notice

05-13 09:09

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 5. 19. 16:18 Programming/.NET

작성날짜    : 2011-04-05


출처 : http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.aspx#Y2166

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.tick.aspx

 


Windows Form Timer

사용자가 정의한 간격마다 이벤트를 발생시키는 타이머를 구현합니다. 이 타이머는 Windows Forms 응용 프로그램에서 사용할 수 있도록 최적화되었으며 창에서 사용해야 합니다.

 

Timer는 사용자가 정의한 간격으로 이벤트를 발생시키는 데 사용됩니다. 이 Windows 타이머는 UI 스레드를 사용하여 프로세스를 수행하는 단일 스레드 환경용입니다. 이 타이머를 사용하려면 사용자 코드에 사용 가능한 UI 메시지 펌프가 있어야 하고 항상 같은 스레드에서 수행되거나 다른 스레드로 호출을 마샬링해야 합니다.

이 타이머를 사용할 때에는 Tick 이벤트를 사용하여 폴링 작업을 수행하거나 지정된 시간 동안 시작 화면을 표시합니다. Enabled 속성이 true로 설정되고 Interval 속성이 0보다 크면 항상 Interval 속성 설정을 기반으로 하는 간격에 따라 Tick 이벤트가 발생합니다.

이 클래스는 간격을 설정하고 타이머를 시작 및 중지할 수 있는 메서드를 제공합니다.

상속 계층 구조

System.Object 
  
System.MarshalByRefObject

    
System.ComponentModel.Component
      System.Windows.Forms.Timer


네임스페이스:  System.Windows.Forms
어셈블리:  System.Windows.Forms(System.Windows.Forms.dll)


참고

Windows Forms Timer 구성 요소는 단일 스레드 구성 요소이고 55밀리초의 정확성으로 제한됩니다. 정확성이 높은 다중 스레드 타이머가 필요한 경우에는 System.Timers 네임스페이스의 Timer 클래스를 사용합니다.


속성

이  름

설  명

CanRaiseEvents

구성 요소가 이벤트를 발생시킬 수 있는지 여부를 나타내는 값을 가져 옵니다.(Component에서 상속됨)

Container

Component가 포함된 IContainer를 가져옵니다. (Component에서 상속됨)

DesignMode

Component가 현재 디자인 모드인지 여부를 나타내는 값을 가져 옵니다. (Component에서 상속됨)

Enabled

타이머가 실행 중인지 여부를 나타내는 값을 가져오거나 설정합니다.

Events

이 Component에 연결된 이벤트 처리기의 목록을 가져옵니다. (Component에서 상속됨)

Interval

Tick 이벤트의 마지막 발생을 기준으로 Tick 이벤트를 발생시킬 시간(밀리초)을 가져오거나 설정합니다.

Site

Component의 ISite를 가져오거나 설정합니다. (Component에서 상속됨)

Tag

사용자 상태의 일부 형식을 나타내는 임의의 문자열을 가져오거나 설정합니다.

 

◈ CanRaiseEvents

형식: System.Boolean

구성 요소가 이벤트를 발생시킬 수 있으면 true이고, 그렇지 않으면 false입니다. 기본값은 true입니다. 

이 속성의 기본 구현에서는 항상 true를 반환합니다. Component 클래스에서 상속하는 클래스는 이 속성을 재정의하여 이벤트를 발생시키지 않는 기능을 제공해야 합니다. 예를 들어, Control 클래스에서 컨트롤이 ActiveX 컨트롤로 호스팅되는 경우 ActiveX 컨트롤에서 이벤트를 발생시키지 않도록 설정되어 있으면CanRaiseEvents 속성은 false를 반환합니다.

상속자 참고 사항

파생 클래스에서 이 메서드를 재정의하고 false를 반환하도록 변경하면 Events 속성에서 반환하는EventHandlerList 컬렉션은 이벤트에 대해 null을 반환합니다. 컬렉션에서 이벤트를 계속 추가하고 제거할 수 있지만 컬렉션의 Item 속성은 항상 null을 반환합니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.canraiseevents.aspx

 

◈ Contain

형식: System.ComponentModel.IContainer

Component가 포함된 IContainer이거나, Component IContainer에 캡슐화되어 있지 않으면 null입니다.

컨테이너의 구성 요소는 컨테이너 내 구성 요소의 순서를 정의하기도 하는 선입 선출(first-in-first-out) 목록에서 추적합니다. 마지막에 추가된 구성 요소는 목록의 마지막 구성 요소입니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.container.aspx

 

◈ DesignMode

형식: System.Boolean
Component가 디자인 모드이면 true이고, 그렇지 않으면 false입니다.

디자인 모드 표시기는 ISite에 저장되므로 Component ISite와 연결되어 있지 않으면 이 속성의 값은 false입니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.designmode.aspx

 

◈ Enabled

형식: System.Boolean
타이머를 현재 사용할 수 있으면 true이고, 그렇지 않으면 false입니다. 기본값은 false입니다. 

값이 true이면 타이머는 가비지 수집의 영향을 받지 않습니다.

Start 메서드를 호출하는 것은 Enabled true로 설정하는 것과 같습니다. 마찬가지로 Stop 메서드를 호출하는 것은 Enabled false로 설정하는 것과 같습니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.enabled.aspx

 

◈ Events

형식: System.ComponentModel.EventHandlerList
이 구성 요소의 대리자를 제공하는 EventHandlerList입니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.events.aspx

 

◈ Interval

형식: System.Int32
Tick 이벤트의 마지막 발생을 기준으로 Tick 이벤트를 발생시킬 시간(밀리초)을 지정하는 Int32입니다. 값은 1보다 작을 수 없습니다. 

간격의 초 수를 가져오려면 이 수를 1,000으로 나눕니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.interval.aspx

 

◈ Site

형식: System.ComponentModel.ISite
Component와 연결된 ISite이거나, Component IContainer에 캡슐화되어 있지 않거나 Component ISite와 연결되어 있지 않거나 Component IContainer에서 제거되었으면 null입니다.

Component IContainer에 추가되고 IContainer에서 ISite를 할당하는 경우 해당 구성 요소는 ISite를 가집니다. IContainer Component ISite를 할당하는 일을 담당합니다. 구성 요소의 ISite 값을 변경하면Component가 할당된 사이트 이름을 변경하지 않아도 됩니다. IContainer Site 속성을 설정해야 합니다.

Component가 해당 IContainer에서 제거되면 이 속성 값은 null입니다. 이 속성에 null을 할당해도 IContainer에서 Component가 제거되지 않을 수 있습니다.

Component에 반드시 이름이 있는 것은 아닙니다. Component의 이름은 해당 IContainer 내의 다른Component 개체 사이에서 고유해야 합니다. Component의 이름은 ISite에 저장되므로 관련된 ISite가 있는 경우에만 Component의 이름을 지정할 수 있습니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.site.aspx

 

 

◈ Tag

형식: System.Object
사용자 상태의 일부 형식을 나타내는 임의의 문자열입니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.tag.aspx

 

 

메서드

이  름

설  명

CreateObjRef

원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.(MarchalByRefObject에서 상속됨)

Dispose()

Component에서 사용하는 모든 리소스를 해제합니다. (Component에서 상속됨)

Dispose(Boolean)

타이머에서 사용하는 리소스(메모리 제외)를 삭제합니다. (Component.Dispose(Boolean)을 재정의함)

Equals(Object)

지정한 Object가 현재 Object와 같은지 여부를 확인합니다. (Object에서 상속됨)

Finalize

가비지 수집에 의해 Component가 회수되기 전에 관리되지 않는 리소스를 해제하고 기타 정리 작업을 수행합니다. (Component에서 상속됨)

GetHashCode

특정 형식에 대한 해시 함수 역할을 합니다.(Object에서 상속됨)

GetLifetimeService

이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.(MarchalByRefObject에서 상속됨)

GetService

Component 또는 해당 Comtainer에서 제공하는 서비스를 나타내는 개체를 반환합니다. (Component에서 상속됨)

GetType

현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)

InitializeLifetimeService

이 인스턴스의 수명 정책을 제어하기 위한 수명 서비스 개체를 가져옵니다. .(MarchalByRefObject에서 상속됨)

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)

MemberwiseClone

(Boolean)

현재 MarchalByRefObject 개체의 단순 복사본을 만듭니다. .(MarchalByRefObject에서 상속됨)

OnTick

Tick 이벤트를 발생시킵니다.

Start

타이머를 시작합니다.

Stop

타이머를 중지합니다.

ToString

인프라입니다. Timer를 나타내는 문자열을 반환합니다.(Component.ToString()을 재정의함)

 

◈ CreateObjRef

매개변수

requestedType

형식: System.Type
새 ObjRef가 참조할 개체의 Type입니다. 

반환 값

형식: System.Runtime.Remoting.ObjRef
프록시를 생성하는 데 필요한 정보입니다.

 

CreateObjRef 메서드는 AppDomain.CreateInstance을를와 AppDomain.CreateInstanceAndUnwrap같은 원격 개체 생성 메서드로 호출됩니다. 대부분의 경우 이 메서드를 재정의할 필요는 없습니다.

http://msdn.microsoft.com/ko-kr/library/system.marshalbyrefobject.createobjref.aspx


◈ Dispose

구현 : IDisposable.Dispose()

Component를 사용한 후에 Dispose를 호출합니다. Dispose 메서드를 사용하면 Component가 사용할 수 없는 상태가 됩니다. Dispose를 호출한 후에 가비지 수집기가 Component에서 차지한 메모리를 회수할 수 있도록Component에 대한 모든 참조를 해제해야 합니다. 

참고

Component에 대한 마지막 참조를 해제하기 전에는 반드시 Dispose를 호출해야 합니다. 그렇지 않으면 가비지 수집기가 Component 개체의 Finalize 메서드를 호출할 때까지 사용 중인 리소스가 해제되지 않습니다.

http://msdn.microsoft.com/ko-kr/library/3cc9y48w.aspx

 

◈ Dispose(Boolean)

매개 변수

disposing

형식: System.Boolean
관리되는 리소스와 관리되지 않는 리소스를 모두 해제하려면 true이고, 관리되지 않는 리소스만 해제하려면 false입니다. 

 

타이머를 사용한 후에 Dispose를 호출합니다. Dispose 메서드를 사용하면 타이머가 사용할 수 없는 상태가 됩니다. Dispose를 호출한 후에는 사용된 메모리를 가비지 수집에서 회수할 수 있도록 타이머에 대한 참조를 모두 해제해야 합니다.

참고

타이머에 대한 마지막 참조를 해제하기 전에는 반드시 Dispose를 호출해야 합니다. 그렇지 않으면 타이머에서 사용하고 있는 리소스는 가비지 수집이 타이머 개체의 소멸자를 호출할 때까지 해제되지 않습니다.

http://msdn.microsoft.com/ko-kr/library/fh7bzc44.aspx

 

◈ Equals(Object)

매개 변수

obj

형식: System.Object
현재 개체와 비교할 개체입니다. 

반환 값

형식: System.Boolean
지정된 Object가 현재 Object와 같으면 true이고, 그렇지 않으면 false입니다.

http://msdn.microsoft.com/ko-kr/library/bsc2ak47.aspx

 

◈ Finalize

이 메서드는 Finalize를 재정의합니다. 응용 프로그램 코드는 이 메서드를 호출하지 않아야 합니다.SuppressFinalize 메서드를 호출하여 가비지 수집기의 종료 기능이 비활성화되지 않는 한 가비지를 수집하는 동안 개체의 Finalize 메서드가 자동으로 호출됩니다.

자세한 내용은 Finalize 메서드 및 소멸자, 관리되지 않는 리소스 정리  Finalize 메서드 재정의을 참조하십시오.

http://msdn.microsoft.com/ko-kr/library/az5741fh.aspx

 

◈ GetHashCode

반환 값

형식: System.Int32
현재 Object의 해시 코드입니다.

http://msdn.microsoft.com/ko-kr/library/system.object.gethashcode.aspx

 

◈ GetLifeTimeservice

반환 값

형식: System.Object
ILease 식의 개체는 이 인스턴스의 수명 정책을 제어하는 데 사용됩니다.

 

http://msdn.microsoft.com/ko-kr/library/system.marshalbyrefobject.getlifetimeservice.aspx

 

◈ GetService

매개 변수

service

형식: System.Type
Component에서 제공하는 서비스입니다. 

반환 값

형식: System.Object
Component에서 제공하는 서비스를 나타내는 Object이거나, Component에서 지정된 서비스를 제공하지 않으면 null입니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.getservice.aspx

 

◈ GetType

반환 값

형식: System.Type
The exact runtime type of the current instance.

동일한 런타임 형식을 갖는 두 개체 x y에 대해 Object.ReferenceEquals(x.GetType(),y.GetType()) true를 반환합니다. 다음 예제에서는 GetType메서드를 사용하여 해당 ReferenceEquals방법을 결정하는 여부를 하나의 숫자 값 형식이 동일한 두 개의 다른 숫자 값.

http://msdn.microsoft.com/ko-kr/library/system.object.gettype.aspx

 

◈ InitializeLifetimeService

반환 값

형식: System.Object
ILease 형식의 개체는 이 인스턴스의 수명 정책을 제어하는 데 사용됩니다. 이 개체는 해당 인스턴스에 대한 현재 수명 서비스 개체이고(있는 경우), 그렇지 않으면 LifetimeServices.LeaseManagerPollTime 속성의 값으로 초기화된 새 수명 서비스 개체입니다. 

http://msdn.microsoft.com/ko-kr/library/system.marshalbyrefobject.initializelifetimeservice.aspx

 

◈ MemberwiseClone

반환 값

형식: System.Object
Object의 단순 복사본입니다.

http://msdn.microsoft.com/ko-kr/library/system.object.memberwiseclone.aspx

 

◈ MemberwiseClone(Boolean)

매개 변수

cloneIdentity

형식: System.Boolean
false
이면 현재 MarshalByRefObject 개체의 ID를 삭제하여 개체가 원격 경계를 넘어 마샬링될 때 개체에 새 ID가 할당됩니다. 대개 false 값이 적합합니다. true이면 현재 MarshalByRefObject 개체의 ID를 복제본으로 복사하여 원격 클라이언트 호출이 원격 서버 개체로 라우팅됩니다. 

반환 값

형식: System.MarshalByRefObject
MarshalByRefObject 개체의 단순 복사본입니다.

http://msdn.microsoft.com/ko-kr/library/ms131262.aspx

 

◈ OnTick

매개 변수

e

형식: System.EventArgs
이벤트 데이터를 포함하는 EventArgs입니다. 이것은 항상 Empty입니다. 

이 메서드는 타이머 틱마다 호출됩니다. 타이머 틱은 Tick을 통해 추가되는 모든 메서드를 호출합니다.Timer에서 상속하는 경우 이 메서드를 재정의할 수 있습니다.

이벤트를 발생시키면 대리자를 통해 이벤트 처리기가 호출됩니다. 

상속자 참고 사항

파생 클래스에서 OnTick을 재정의하는 경우 기본 클래스의 OnTick 메서드를 호출해야 합니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.ontick.aspx

 

◈ Start

Enabled 속성을 true로 설정하여 타이머를 시작할 수도 있습니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.start.aspx

 

◈ Stop

Enabled 속성을 false로 설정하여 타이머를 중지할 수도 있습니다. Timer개체는 동일한 응용 프로그램 세션에서 여러 번 활성화 및 비활성화될 수 있습니다.

Stop을 호출하여 Timer를 비활성화한 후 Start를 호출하면 Timer가 중단된 시간 계산을 다시 시작합니다.Timer가 5000밀리초 간격으로 설정된 경우 약 3000밀리초에 Stop을 호출하고 다시 Start를 호출하면 Timer는 5000밀리초 동안 대기한 후 Tick이벤트를 발생시킵니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.stop.aspx

 

◈ ToString

반환 값

형식: System.String
현재 Timer를 나타내는 문자열입니다. 

ToString 메서드는 Interval 속성 값이 포함된 문자열을 반환합니다.

http://msdn.microsoft.com/ko-kr/library/9we00a69.aspx

 

이벤트

이  름

설  명

Disposed

Dispose 메서드를 호출하여 구성 요소가 삭제되는 경우 발생합니다.(Component에서 상속됨)

Tick

지정된 타이머 간격이 경과되고 타이머를 사용할 수 있을 때 발생합니다.

 

◈ Disposed

구현 : IComponent.Disposed

Disposed 대리자를 만드는 경우 이벤트를 처리하는 메서드를 결정합니다. 이벤트를 이벤트 처리기와 연결하려면 대리자의 인스턴스를 해당 이벤트에 추가합니다. 대리자를 제거하지 않는 경우 이벤트가 발생할 때마다 이벤트 처리기가 호출됩니다.

http://msdn.microsoft.com/ko-kr/library/system.componentmodel.component.disposed.aspx

 

◈ Tick

 어설션 대화 상자를 표시하면 Windows에서 Tick 이벤트가 반복적으로 발생하기 때문에 Tick 이벤트에서Debug 클래스에 대해 Assert 메서드를 호출할 경우 예상대로 작동하지 않을 수도 있습니다.  이벤트에서 어설션을 테스트하는 대신 Write, WriteIf, WriteLine 또는 WriteLineIf 메서드를 사용하는 것이 좋습니다.

http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.tick.aspx


예제 프로그램

Timer를 사용하여 간단한 프로그램을 작성해 보았다.

영어 단어는 6초마다 화면에 출력되고, 뜻은 영어 단어가 출력된 후 3초 후에 출력되게 된다. 그리고 이미지로 1~6초를 나타내 준다.

 

멤버 필드

String[] words = { "Hello""yahoo""everyday""holiday" };

      String[] means = { "안녕""야호""언제나""휴일" };

      Bitmap[] bitmap = new Bitmap[6];

 const string ImageDirectory = "picture";

 int now = 0;

       int second = -1;

일단 영어 단어 배열과, 뜻 배열, bitmap 배열, bitmap 이미지가 있는 폴더명, 화면에 새롭게 보여 줄 단어의 Index를 나타낼 now 변수, bitmap 이미지를 화면에 보여 주기 위한 second 변수를 선언해 준다.

 

Form1_Load 이벤트

private void Form1_Load(object sender, EventArgs e)

{

    string fullpath = Path.GetFullPath(String.Format(@ImageDirectory));

    bitmap[0] = new Bitmap(Image.FromFile(String.Format(fullpath + @"\1.bmp")));

    bitmap[1] = new Bitmap(Image.FromFile(String.Format(fullpath + @"\2.bmp")));

    bitmap[2] = new Bitmap(Image.FromFile(String.Format(fullpath + @"\3.bmp")));

    bitmap[3] = new Bitmap(Image.FromFile(String.Format(fullpath + @"\4.bmp")));

 bitmap[4] = new Bitmap(Image.FromFile(String.Format(fullpath + @"\5.bmp")));

    bitmap[5] = new Bitmap(Image.FromFile(String.Format(fullpath + @"\6.bmp")));

   labelOfMean.Visible = false;

}

Form이 로딩되면 bitmap이미지를 bitmap 이미지에 대입하여 준다. 그리고 뜻은 보이지 않게 설정 해 준다.

 

이미지를 불러오는 방법은 몇 가지가 있는데 그 중 하나는 위와 같이 실행 파일과 같은 root에 있는 곳에 있는 폴더에(ImageDirectory 변수 선언한 부분) 이미지를 불러오는 방법이고, 아래는 절대 경로로 지정하는 방법이 있다. 하지만.. 절대 경로로 할 경우.. 이 프로그램을 배포했을 경우나 이미지의 경로가 바뀌어 버리면 이미지를 불러오지 못하므로.. 위와 같은 방법을 쓰기를 추천한다.

bitmap[0] = Image.FromFile("C:\\picture\\1.bmp"as Bitmap;

    bitmap[1] = Image.FromFile("C:\\picture\\2.bmp"as Bitmap;

    bitmap[2] = Image.FromFile("C:\\picture\\3.bmp"as Bitmap;

    bitmap[3] = Image.FromFile("C:\\picture\\4.bmp"as Bitmap;

    bitmap[4] = Image.FromFile("C:\\picture\\5.bmp"as Bitmap;

    bitmap[5] = Image.FromFile("C:\\picture\\6.bmp"as Bitmap;

 

첫번째 Timer

private void timer1_Tick(object sender, EventArgs e)

    {

        labelOfMean.Visible ^= true;

    }

3초마다 뜻을 화면에 보여 주고, 숨기고 하기 위한 Timer

 

두번째 Timer

private void timer2_Tick(object sender, EventArgs e)

   {

       now = (now + 1) % words.Length;

       labelOfWord.Text = words[now];

       labelOfMean.Text = means[now];

   }

시작 후 6초가 흐른 후 새로운 단어와 뜻을 화면에 출력해 주기 위한 Timer

 

세번째 Timer

private void timer3_Tick(object sender, EventArgs e)

    {

        second = (second+1) % bitmap.Length;

        pictureBox1.Image = bitmap[second];

    }

이미지를 1초마다 바꿔 주기 위한 Timer

 

실행 화면

처음 실행했을 시 화면이다.

 

 

시작 버튼을 누르면 이미지가 바뀌면서 프로그램이 시작되고 6초가 되면 새로운 단어가 화면에 보여진다.

 

새로운 단어가 화면에 보여 진 뒤 3초가 지나면 뜻이 화면에 보여 진다.

중지 버튼을 누르면 일시 정지된다.

실행 파일 :

'Programming > .NET' 카테고리의 다른 글

[.NET] DataAdapter  (0) 2015.05.19
[.NET] try-catch-finally  (0) 2015.05.19
[.NET] Form  (0) 2015.05.19
[.NET] Remoting  (0) 2015.05.19
[.NET] marchalling (마샬링)  (0) 2015.05.19
posted by Kanais