/// <summary> /// /// </summary> /// <param name="cmd"></param> /// <param name="owningTask"></param> /// <remarks> /// 可能包含读取并清除本地数据的后续指示(在Task.Tag中) /// </remarks> private void ProcessReadTotalCountCmd(ReadTotalCountCommand cmd, Task owningTask) { if (owningTask.Tag != null) { object[] tags = owningTask.Tag as object[]; if (tags != null && tags.Length == 2) { TagType tagType = (TagType)tags[0]; XGTask xgtask = (XGTask)tags[1]; //Immediate task strategy 被加到tasks的最前端,所以要先加入,一般在读取完所有的记录后清空。 // RemoveAllCommand clearCmd = new RemoveAllCommand(cmd.Station as XGStation); Task clearTask = new Task(clearCmd, new ImmediateTaskStrategy()); clearTask.Tag = xgtask; clearTask.BeforeExecuteTask += new EventHandler(clearTask_BeforeExecuteTask); Singles.S.TaskScheduler.Tasks.Add(clearTask); for (int i = 0; i < cmd.TotalCount; i++) { ReadRecordCommand rdcmd = new ReadRecordCommand(cmd.Station as XGStation, i + 1); Task t = new Task(rdcmd, new ImmediateTaskStrategy()); Singles.S.TaskScheduler.Tasks.Add(t); } } } }
//public int MatchRecord( XGAutoReportData record ) public int MatchRecord(XGData data) { ArgumentChecker.CheckNotNull(data); if (_tasks == null) { return(0); } int matchedCount = 0; for (int i = 0; i < _tasks.Count; i++) { XGTask task = _tasks[i]; if (task.IsActive && !task.IsComplete && task.MatchXGData(data)) { //task.XgTaskResult = XGTaskResult.CreateSuccessResult( task, record.DateTime ); task.XgTaskResult = data; task.IsComplete = true; matchedCount++; } } return(matchedCount); }
/// <summary> /// 检查巡更任务,检查巡更任务列表中的每一个任务,如果DateTime.Now处于该任务的活动时间段,则激活该任务。 /// </summary> public void CheckTasks() { for (int i = 0; i < _tasks.Count; i++) { XGTask task = _tasks[i]; task.IsActive = !task.IsOutTime(DateTime.Now); } }
private void clearTask_BeforeExecuteTask(object sender, EventArgs e) { //RemoveAllCommand c = sender as RemoveAllCommand ; Task t = sender as Task; ArgumentChecker.CheckNotNull(t); if (t.Tag != null) { XGTask xgt = t.Tag as XGTask; xgt.ReadLocalXgDataComplete(); } }
/// <summary> /// /// </summary> /// <param name="data"></param> /// <returns></returns> public XGTask[] MatchXGData(XGData data) { System.Collections.ArrayList list = new System.Collections.ArrayList(); if (data == null) { return(null); } for (int i = 0; i < Count; i++) { XGTask task = this[i]; if (task.MatchXGData(data)) { task.XgTaskResult = data; task.IsComplete = true; list.Add(task); } } return((XGTask[])list.ToArray(typeof(XGTask))); }
public int Add(XGTask task) { return(base.InternalAdd(task)); }