/// <summary> /// Constructor /// </summary> public CalculationEngineForecast() { wfProxy = new WeatherForecastProxy(); chfProxy = new CalculateHourlyForecast(); model = CalculationEngineModel.Instance; powCalc = new PowerCalculator(); Thread newThread = new Thread(CalculatePerHour); newThread.Start(); }
/// <summary> /// Calculate forecast for all ders in model /// </summary> public void CalculateForecastForDers() { model.ForecastListOfDers.Clear(); LogHelper.Log(LogTarget.File, LogService.CalculationEngineForecast, " INFO - CalculationEngineForecast.cs - Calculate forecast for all ders in model."); List <Task <ForecastObject> > tasks = new List <Task <ForecastObject> >(); foreach (SynchronousMachine der in model.DersOriginal) { Task <ForecastObject> task = new Task <ForecastObject>(() => { WeatherInfo wi = wfProxy.Proxy.Get7DayPerHourForecastByGid(der.GlobalId); List <Data> hourlyData = wi.Hourly.Data; long sunriseTime = wi.Daily.Data.FirstOrDefault().SunriseTime; long sunsetTime = wi.Daily.Data.FirstOrDefault().SunsetTime; ForecastObject forecastObj = null; AnalogValue modelDataActive = CalculationEngineModel.Instance.AnalogPointsOriginal.Where(o => o.SynchronousMachine.Equals(der.GlobalId) && o.PowerType.Equals(PowerType.Active)).FirstOrDefault(); AnalogValue modelDataReactive = CalculationEngineModel.Instance.AnalogPointsOriginal.Where(o => o.SynchronousMachine.Equals(der.GlobalId) && o.PowerType.Equals(PowerType.Reactive)).FirstOrDefault(); chfProxy = new CalculateHourlyForecast(); forecastObj = chfProxy.CalculateHourlyForecastForDer(hourlyData, der, sunriseTime, sunsetTime, modelDataActive, modelDataReactive); return(forecastObj); }); tasks.Add(task); } foreach (Task <ForecastObject> task in tasks) { task.Start(); } foreach (Task <ForecastObject> task in tasks) { task.Wait(); ForecastObject forecastObj = task.Result; if (forecastObj != null) { model.ForecastListOfDers.Add(forecastObj); } } }