C# delegate 사용법 - 사례3
Window Application 타 Server로부터 Push Message를 받기 위해 Socket Class library를 작성중이다.
예전에 nsoftware사의 DotNetFramework 기반의 상용 모듈을 사용한 경험이 있어 비슷하게 구현할 생각인데
Socket Client/Server Module을 Class Library로 작성해 Recv된 데이터는 delegate를 이용해 받을 대상
원도우로 전달할 생각이다.

우선 Class Library에 MainWindow에 전달할 delegate event 생성한다.
...
#region Event Delegates
public delegate void OnCurTimeEventHandler(object sender, EvtArgs e);
#endregion
public class BkgrndTimer
{
#region 속성
DispatcherTimer objTicker = new DispatcherTimer();
#endregion
#region 이벤트
public event OnCurTimeEventHandler OnCurTimeEvent;
#endregion
public void BeginTicker()
{
objTicker.Interval = TimeSpan.FromSeconds(1);
objTicker.Tick += new EventHandler(OnTimeTick_EventHandler);
objTicker.Start();
}
public void EndTicker()
{
objTicker.Stop();
objTicker.IsEnabled = false;
}
private void OnTimeTick_EventHandler(object sender, EventArgs e)
{
objTicker.Stop();
string sCurTime = string.Format("{0:0000}-{1:00}-{2:00} {3:00}:{4:00}:{5:00}",
DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
OnCurTimeEvent(this, new EvtArgs(sCurTime));
objTicker.Start();
}
}
public class EvtArgs
{
public string sCURTIME;
public EvtArgs(string sCurTime)
{
sCURTIME = sCurTime;
}
}
생성된 delegate event는 MainWindow에서 아래와 같이 받았다.
public partial class MainForm : Form
{
#region 속성
private BkgrndTimer.BkgrndTimer objBkgrndTimer = new BkgrndTimer.BkgrndTimer();
#endregion
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
objBkgrndTimer.OnCurTimeEvent += new BkgrndTimer.OnCurTimeEventHandler(OnBkgrndEvent_Handler);
objBkgrndTimer.BeginTicker();
}
private void OnBkgrndEvent_Handler(object sender, BkgrndTimer.EvtArgs e)
{
this.lbCurTime.Text = e.sCURTIME;
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
objBkgrndTimer.OnCurTimeEvent -= new BkgrndTimer.OnCurTimeEventHandler(OnBkgrndEvent_Handler);
}
}
예제는 Class Library에서 DispatcherTimer를 이용한 현재 시간을 MainWindow에 전달한 것이지만 이 개념을 바탕으로
작성했다. 다시 작업 시작...