delegate Demo(System.Timers.Timerに関するDemo)
8630 ワード
namespace Delegates
{
partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
clock = new Clock(digital);
}
private void start_Click(object sender, System.EventArgs e)
{
this.clock.Start();
}
private void stop_Click(object sender, System.EventArgs e)
{
this.clock.Stop();
}
private Clock clock;
}
}
Clock.csクラスの内容
namespace Delegates
{
using System.Windows.Forms;
class Clock
{
public Clock(TextBox displayBox)
{
this.display = displayBox;
}
public void Start()
{
pulsed.Add(this.RefreshTime);
}
public void Stop()
{
pulsed.Remove(this.RefreshTime);
}
private delegate void InvokeCallback(string msg);
private void RefreshTime(int hh, int mm, int ss)
{
if (!this.display.InvokeRequired)
{
this.display.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", hh, mm, ss);
}
else
{
InvokeCallback msgCallback = new InvokeCallback(DisplayText);
display.Invoke(msgCallback, new object[] { string.Format("{0:D2}:{1:D2}:{2:D2}", hh, mm, ss) });
}
}
private void DisplayText(string text)
{
this.display.Text = text;
}
private Ticker pulsed = new Ticker();
private TextBox display;
}
}
namespace Delegates
{
using System.Collections;
using System.Timers;
using System.Windows.Forms;
class Ticker
{
public delegate void Tick(int hh, int mm, int ss);
public Ticker()
{
this.ticking.Elapsed += new ElapsedEventHandler(this.OnTimedEvent);
this.ticking.Interval = 1000; // 1 second
this.ticking.Enabled = true;
}
public void Add(Tick newMethod)
{
this.tickers += newMethod;
}
public void Remove(Tick oldMethod)
{
this.tickers -= oldMethod;
}
private void Notify(int hours, int minutes, int seconds)
{
if (this.tickers != null)
{
this.tickers(hours, minutes, seconds);
}
}
private void OnTimedEvent(object source, ElapsedEventArgs args)
{
int hh = args.SignalTime.Hour;
int mm = args.SignalTime.Minute;
int ss = args.SignalTime.Second;
Notify(hh, mm, ss);
}
private Tick tickers;
private System.Timers.Timer ticking = new System.Timers.Timer();
}
}
Ticker.csクラスの内容