// Metóda ktorú vykonáva BackgroundWorker po jeho vytvorení. private void SimulationWorker_DoWork(object sender, DoWorkEventArgs e) { // Najskôr dôjde k inicializácii simulácie. this._controller.InitilizeSimulation(SimResultView); // Nasleduje zavolanie metódy na spustenie simulácie v kontrolery, kde je ako parameter zaslaná referencia na backgroundworkera, aby bolo možné zistiť, // či je požadované predčasné ukončenie simulácie. this._controller.RunSimulation(this.simulationWorker); // Po skončení simulácie sa z kontrolera získajú posledne inicializované dáta a výsledok je zobrazený na výstupe. var lastData = new DataForUpdate(this._controller.lastDataForUpdate); lastData.redrawGraphs = true; this.simulationWorker.ReportProgress(0, lastData); // Vyhodnocuje sa, či došlo k predčasnému skončeniu simulácie. if (this.simulationWorker.CancellationPending) { // V prípade, že došlo k predčasnému ukončeniu simulácie, zisťuje sa či došlo k jej úplnému zastaveniu alebo len k jej pozastaveniu. if (this._controller.SimulationStatus != Model.Simulation.SimulationStatus.FINISHED) { e.Cancel = true; } } }
// Metóda, ktorú vykonáva backgroundworker po nahlásení zmeny stavu. Obsahuje dáta, ktoré sa majú zobraziť na výstupe. private void SimulationWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { DataForUpdate data = (DataForUpdate)e.UserState; this.SimResultView.Update(data); }