public InitResourceObjectHandler(int startSecond, int endSecond, bool putIntoServer, AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel, AircraftDataAnalysisWinRT.Services.IDataReading dataReading, FastDataReadingResourceObject resourceObject) : base(startSecond, endSecond, putIntoServer, previewModel, dataReading) { }
/// <summary> /// 读取数据并入库 /// </summary> /// <param name="startSecond"></param> /// <param name="endSecond"></param> /// <param name="putIntoServer">是否入库</param> /// <param name="previewModel">如果需要返回预览模型则传入空Model,数据会直接写入此对象。传空则表示不需预览</param> public void ReadData(int startSecond, int endSecond, bool putIntoServer, AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel) { m_handlers.Clear(); FastDataReadingStepHandler deleteHandler = new DeleteExistsHandler(startSecond, endSecond, putIntoServer, previewModel, this) { CurrentFlight = this.Flight, Parameters = this.Parameters }; m_handlers.Add(deleteHandler); deleteHandler.DoWorkAsync();//1. m_resourceObject = new FastDataReadingResourceObject(); FastDataReadingStepHandler initHandler = new InitResourceObjectHandler(startSecond, endSecond, putIntoServer, previewModel, this, m_resourceObject) { CurrentFlight = this.Flight, Parameters = this.Parameters }; m_handlers.Add(initHandler); initHandler.DoWorkAsync();//1. ReadSecondsHandler readSecondsHandler = new ReadSecondsHandler(startSecond, endSecond, putIntoServer, previewModel, this) { CurrentFlight = this.Flight, Parameters = this.Parameters }; m_handlers.Add(readSecondsHandler); readSecondsHandler.StepHandlers = new List<StepSecondsFastDataReadingStepHandler>(); //把所有单步Handler返回来 GenerateStepHandlers(startSecond, endSecond, putIntoServer, previewModel, readSecondsHandler.StepHandlers); //加入总的Handler列表 m_handlers.AddRange(readSecondsHandler.StepHandlers); //最终执行顺序: //1.先执行Delete、Init,完成后可以开始所有StepHandler //2.启动StepHandlers全部,开始监听所有动作 //3.启动ReadSecondsHandler,里面对每一步的操作,都要激发StepHandlers的操作 //4.调用GetResult,等待所有操作完成,每个类的GetResult自行负责Finalize //2. 启动StepHandlers全部,开始监听所有动作 Parallel.ForEach(readSecondsHandler.StepHandlers, new Action<StepSecondsFastDataReadingStepHandler>( delegate(StepSecondsFastDataReadingStepHandler stepHandler) { try { stepHandler.DoWorkAsync(); } catch (Exception e) { LogHelper.Error(e); } })); //3. 启动ReadSecondsHandler,里面对每一步的操作,都要激发StepHandlers的操作 readSecondsHandler.DoWorkAsync(); //4.调用GetResult,等待所有操作完成,每个类的GetResult自行负责Finalize Parallel.ForEach(m_handlers, new Action<FastDataReadingStepHandler>(delegate(FastDataReadingStepHandler handler) { string result = string.Empty; try { result = handler.GetResult(); } catch (Exception ee) { result = ee.Message + "\r\n" + ee.StackTrace; } if (!string.IsNullOrEmpty(result)) { LogHelper.Error(new Exception(result)); } })); //所有操作完成 return; }