이 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()
을 호출하여 타이머를 제거하십시오.
자신 만의 틱 이벤트를 제기하고 청취자가 해당 이벤트에 가입하도록해야합니다. 이 Timer 클래스는 Main 폼에 대해 아무 것도 알지 못합니다. 폼에서 타이머 구성 요소를 사용하는 것보다 클래스가 갖는 이점이 명확하지 않습니다. – LarsTech
하나의 프로젝트 솔루션에 여러 가지 WindowsForms을 사용할 계획이며 작성한 각 양식에 이러한 메서드를 추가하지 않도록 노력하고 있습니다. (끊임없이 스크롤되는 코드가 적음). 이 이벤트는 [기사] (http://msdn.microsoft.com/en-us/library/aa970850.aspx)에서 설명하는 약한 이벤트 패턴으로 간주됩니까? – Matt
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –