public void Invoke(DateTime curTime) { if (curTime < _nextInvokeTime) { return; } else if (curTime >= _endTime) { CalNextTime(curTime); return; } if (0 == Interlocked.Exchange(ref _syncInvoke, 1)) { try { DateTime curDate = curTime.Date; var openTime = DailyEventThread.CalTime(curDate, _config.OpenHour, _config.OpenMinute); var startTime = DailyEventThread.CalTime(curDate, _config.StartHour, _config.StartMinute); var endTime = DailyEventThread.CalTime(curDate, _config.EndHour, _config.EndMinute); _dailyeventEntity.OpenTime = openTime; _dailyeventEntity.StartTime = startTime; _dailyeventEntity.EndTime = endTime; _dailyeventEntity.RecordDate = curDate; try { _startDelegate(startTime, endTime); } catch (Exception ex) { SystemlogMgr.Error("Dailyevent info Invoke inner", ex); } MonitorDailyeventMgr.Save(_dailyeventEntity.ZoneId, _dailyeventEntity.EventType, _dailyeventEntity.OpenTime, _dailyeventEntity.StartTime, _dailyeventEntity.EndTime, _dailyeventEntity.RecordDate); CalNextTime(curTime); } catch (Exception ex) { SystemlogMgr.Error("Dailyevent info Invoke", ex); } finally { Interlocked.Exchange(ref _syncInvoke, 0); } } }