??????????????????????????????????????????д?????????????????:
?????????????д?????????????????????????????????????棬??????????????Publish-Subscribe??????????????????????????????????ó?????????????????????????
?????????C#???????????????????????????????????????????????
??????????????????????????????????????ù?????????????
??????????δ????????????????????????????????API???????????????????????????????????(smartClock)????????????????????????API????????????????????????????????????????????????????????????濾???????????豸?????????????????????????????????????????????????
????????????????????????????????????????????????(subject)????????????????濾???????????豸??????(observer)???????????????????????????????????????????????????????????????????
???????????.net??Event????????
????.net?е?Event??????????????????????.net??????????????????????У?????????????????????????????
?????????????????????????????????????API
????public void SetAlarmTime(TimeSpan timeSpan)
????{
????_alarmTime = _now().Add(timeSpan);
????RunBackgourndRunner(_now?? _alarmTime);
????}
????SetAlarmTime(TimeSpan timeSpan)?????????????????ú????????????????????????????while(true)????????????????????????????????????????
protected void RunInBackgournd(Func<DateTime> now??DateTime? alarmTime )
{
if (alarmTime.HasValue)
{
var cancelToken = new CancellationTokenSource();
var task = new Task(() =>
{
while (!cancelToken.IsCancellationRequested)
{
if (now.AreEquals(alarmTime.Value))
{
//?????????
ItIsTimeToAlarm();
cancelToken.Cancel();
}
cancelToken.Token.WaitHandle.WaitOne(TimeSpan.FromSeconds(2));
}
}?? cancelToken.Token?? TaskCreationOptions.LongRunning);
task.Start();
}
}
???????????????????????????????????????ItIsTimeToAlarm(); ??????????????????????????.net?????event???????????
????1.?????(subject)????????event?? public event Action<Clock?? AlarmEventArgs> Alarm;
????2.?????(subject)????????????EventArgs????AlarmEventArgs???????????????????е????
????3.????(subject)??????·?????????
????var args = new AlarmEventArgs(_alarmTime.Value?? 0.92m);
????OnAlarmEvent(args);
????OnAlarmEvent?????????
????public virtual void OnAlarm(AlarmEventArgs e)
????{
????if(Alarm!=null)
????Alarm(this??e);
????}
?????????????????淶?????????-AlarmEventArgs?????-Alarm(?????????KeyPress)?????????????? void OnAlarm()????Щ???????????????????????淶??