private BackgroundSimulationInput GetSimulationInput() { var input = new BackgroundSimulationInput(); input.timeHorizon = double.Parse(tbTimeHorizon.Text); input.timeStep = double.Parse(tbTimeStep.Text); pointsPerSecond = int.Parse(tbPointsPerSecond.Text); iterativeSimulator.initialMode = (ControlSystemMode)cbMode.SelectedValue; iterativeSimulator.waveType = (SignalType)cbInputType.SelectedValue; StepsParametersConverter stepsConverter = new StepsParametersConverter(); double[] stepTimes, stepValues; stepsConverter.Convert(tbStepTimes.Text, tbStepValues.Text, out stepTimes, out stepValues); iterativeSimulator.SignalGenerator.SetStepsParameters(stepTimes, stepValues); double frequency, amplitude, offset; WavesParametersConverter wavesConverter = new WavesParametersConverter(); wavesConverter.Convert(tbFrequency.Text, tbAmplitude.Text, tbOffset.Text, out frequency, out amplitude, out offset); iterativeSimulator.SignalGenerator.SetWavesParameters(frequency, amplitude, offset); input.iterativeSimulator = iterativeSimulator; return(input); }
public void Start(BackgroundSimulationInput iterativeSimulator) { if (!IsRunning()) { worker.RunWorkerAsync(iterativeSimulator); } }
private void Worker_DoWork(object sender, DoWorkEventArgs e) { Debug.WriteLine("Worker started"); worker.ReportProgress(0); // extract all data from worker input BackgroundSimulationInput input = (BackgroundSimulationInput)e.Argument; double timeHorizon = input.timeHorizon; double timeStep = input.timeStep; IterativeSimulator simulator = input.iterativeSimulator; int iterations = (int)Math.Floor(timeHorizon / timeStep) + 1; var executionTime = ExecTime.Run(() => { // first iteration - simulation initialization simulator.PrepareSimulation(timeStep); progressCounter.Initialize(iterations); progressCounter.NextIteration(); // perform calculations for (int i = 1; i < iterations; i++) { if (worker.CancellationPending) { e.Cancel = true; break; } simulator.NextIteration(); progressCounter.NextIteration(); } }); // return result BackgroundSimulationOutput output = new BackgroundSimulationOutput() { totalIterations = iterations, timeStep = timeStep, executionTime = executionTime, data = simulator.GetData() }; e.Result = output; }