2013-08-13 1 views
0

question에 설명 된 솔루션을 성공적으로 사용했습니다.클래스 이벤트 기본 프로그램에서 동작 트리거링

이제 여러 가지 다른 형식의 타이머 메서드를 다시 사용하고 다양한 양식의 메서드 수가 최소한으로 유지되도록 클래스를 만들려고했습니다. 그러나 나는 프로그래밍과 클래스와 이벤트를 사용하는 것에 상당히 익숙하지 않다. 그리고 나는 이것이 올바르게 접근하고 있다고 생각하지 않는다.

아래는 지금까지 제 수업입니다. 메인 프로그램에서 수업 시간에 수강 할 수 있나요? 나는 심지어 수업을 사용해야 할까?

using System; 
using System.Timers; 

namespace TMP_ERP 
{ 
    class Timer 
    { 
     int MilliSeconds; 
     System.Windows.Forms.Timer queryTimer; 

     public Timer() 
     { 
     } 


     //Revokes the timer if not already revoked 
     public void RevokeQueryTimer() 
     { 
      if (queryTimer != null) 
      { 
       queryTimer.Stop(); 
       queryTimer.Tick -= queryTimer_Tick; 
       queryTimer = null; 
      } 
     } 

     public void RestartQueryTimer() 
     { 
      //start or reset a pending query 
      if (queryTimer == null) 
      { 
       queryTimer = new System.Windows.Forms.Timer { Enabled = true, Interval  = 1500 }; 
       queryTimer.Tick += queryTimer_Tick; 
      } 

      else 
      { 
       queryTimer.Stop(); 
       queryTimer.Start(); 
      } 
     } 

     void queryTimer_Tick(object sender, EventArgs e) 
     { 
      //Tells Main Program to do something? 
     } 
    } 
} 

누군가가 문자를 입력 할 때마다 나는 RestartQueryTimer()이라고 부릅니다. QueryTimer 틱보다 데이터베이스에 쿼리 한 다음 RevokeQueryTimer()을 호출하여 타이머를 제거하십시오.

+0

자신 만의 틱 이벤트를 제기하고 청취자가 해당 이벤트에 가입하도록해야합니다. 이 Timer 클래스는 Main 폼에 대해 아무 것도 알지 못합니다. 폼에서 타이머 구성 요소를 사용하는 것보다 클래스가 갖는 이점이 명확하지 않습니다. – LarsTech

+0

하나의 프로젝트 솔루션에 여러 가지 WindowsForms을 사용할 계획이며 작성한 각 양식에 이러한 메서드를 추가하지 않도록 노력하고 있습니다. (끊임없이 스크롤되는 코드가 적음). 이 이벤트는 [기사] (http://msdn.microsoft.com/en-us/library/aa970850.aspx)에서 설명하는 약한 이벤트 패턴으로 간주됩니까? – Matt

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

답변

0

이 상황에서 가장 좋은 예는 이미 Timer - System.Windows.Forms.Timer 내부에서 사용하고있는 타이머의 인터페이스입니다. 내부 타이머와 똑같은 클래스를 클라이언트에게 알리기위한 이벤트를 제공하십시오.

+0

콜백이라고할까요? – Matt

+0

일반적으로이 용어는 클래스가 클라이언트를 호출하는 함수 또는 제공된 콜백 인터페이스에 대한 포인터를 제공하는 컨텍스트에서 사용됩니다. 사건의 맥락에서 보통 '사건'이라는 용어 만 사용되고 일반적으로 인정됩니다. 하지만 기술적으로는 거의 똑같습니다. 가장 큰 차이점은 이벤트가 이벤트 루프의 컨텍스트에서 처리되는 경우가 있기 때문에 일반적인 콜백보다 더 중요한 것입니다. – BartoszKP

관련 문제