public void runThreadedSimulation(Simulation simulation, ISimulationListener listener) { lock (runningSimulations) { bool contains = false; foreach (SimulatorThread s in runningSimulations) { if (s.simulation == simulation) { contains = true; break; } } if (!contains) { simulation.setSimulationListener(listener); //start a thread for the simulation and return SimulatorThread threadTarget = new SimulatorThread(simulation); Thread newThread = new Thread(new ThreadStart(threadTarget.run)); threadTarget.runningThread = newThread; runningSimulations.AddLast(threadTarget); newThread.Start(); } } }
private void ReturnBtn_Click(object sender, EventArgs e) { if (SimulatorThread != null && SimulatorThread.IsAlive) { SimulatorThread.Abort(); } ReturnClick?.Invoke(this); }
protected void simulationFinished(SimulatorThread simulation) { lock (runningSimulations) { runningSimulations.Remove(simulation); if (finishing && runningSimulations.Count == 0) { //call for the program to exit Application.Exit(); } } }