void device_ResultGot4Custom(AgentTaskResult result) { if (!Got && result.Context.Equals(this)) { Got = true; this.Device.ResultGot4Custom -= device_ResultGot4Custom; ResultGotHandler(result); result.Context = null; waitHandle.Set(); } }
protected void ExecueJob(Job4Agent job) { var result = new AgentTaskResult(job.Identity); result.Action = job.Content.Action; try { switch (job.Content.Action) { case "Send": this.IOAgent.Send(job.Content.SendPacket); result.Successed = true; break; case "Read": result.ExecuteResult = this.IOAgent.Read(job.Content.ReadFilter, 0x00); result.Successed = true; break; case "SendAndRead": result.ExecuteResult = this.IOAgent.SendAndRead(job.Content.SendPacket, job.Content.ReadFilter); result.Successed = true; break; default: if (CustomActionExecute != null) { CustomActionContext caContext = new CustomActionContext(); caContext.Agent = this; caContext.IO = this.IOAgent; caContext.Job = job; result.ExecuteResult = CustomActionExecute(caContext); result.Successed = true; } else { result.Exception = new ArgumentException("未能识别的Action"); result.Successed = false; } break; } } catch (Exception e) { System.Diagnostics.Debug.Write("Exception Catch On AgentAsync.ExecueJob"); System.Diagnostics.Debug.WriteLine(String.Format("{0}:{1}", e.GetType(), e.Message)); System.Diagnostics.Debug.WriteLine(e.StackTrace); result.Exception = e; result.Successed = false; } result.Context = job.Content.Context; if (Scheduler.ScheduleState != ScheduleStates.Running) { return; } ResultGot(result); if (EnableResultQueue) { ResultQueue.Enqueue(result); } }
/// <summary> /// 处理任务返回 /// </summary> /// <param name="result"></param> protected virtual void ResultGotHandler(AgentTaskResult result) { }