private async void CalculateSonicBoomMenuItem_Click() { var CalculateArgs = new CalculateSonicBoomEventArgs( RocketGeometricalParameters, VehicleGeometricalParameters, RocketSonicBoomBallistics, VehicleSonicBoomBallistics, SonicBoomWeatherParameters); await Task.Run(() => CalculateSonicBoom(CalculateArgs)); Action <List <SonicBoomParameters>, DataGridView> SetResults = (SonicBoomParameters, Grid) => { Grid.Rows.Clear(); if ((SonicBoomParameters == null) || (SonicBoomParameters.Count == 0)) { return; } Grid.Rows.Add(SonicBoomParameters.Count); for (int i = 0; i < SonicBoomParameters.Count; i++) { var Row = Grid.Rows[i]; var sbp = SonicBoomParameters[i]; Row.Cells[0].Value = FormatConvert.ToString(sbp.Time); Row.Cells[1].Value = FormatConvert.ToString(sbp.Height * 1E-3); Row.Cells[2].Value = FormatConvert.ToString(sbp.MachNumber); Row.Cells[3].Value = FormatConvert.ToString(sbp.OverPressure); Row.Cells[4].Value = FormatConvert.ToString(sbp.SoundLevel); Row.Cells[5].Value = FormatConvert.ToString(sbp.ImpactDistance * 1E-3); Row.Cells[6].Value = FormatConvert.ToString(sbp.ImpactDuration); } }; SetResults(CalculateArgs.RocketSonicBoomParameters, RocketSonicBoomGrid); SetResults(CalculateArgs.VehicleSonicBoomParameters, VehicleSonicBoomGrid); }
//SonicBoomCalculation void MainView_CalculateSonicBoom(CalculateSonicBoomEventArgs e) { Func <GeometricalParameters, bool> IsGeometricalParametersNull = Parameters => Parameters.CharacteristicArea * Parameters.CharacteristicLength * Parameters.Length * Parameters.MaximalArea == 0; List <SonicBoomParameters> Rocket; List <SonicBoomParameters> Vehicle; Model.CalculateSonicBoom( new SonicBoomCalculationInputData(e.RocketBallistics, e.RocketGeometricalParameters), new SonicBoomCalculationInputData(e.VehicleBallistics, e.VehicleGeometricalParameters), e.WeatherParameters, out Rocket, out Vehicle); e.RocketSonicBoomParameters = Rocket; e.VehicleSonicBoomParameters = Vehicle; }