private void PresentatieVoortgangCallback(int lijstTotaal, int bijItem, float individueleVoortgang) { if (Status == GeneratorStatus.Gestopt) { return; } _setVoortgang?.Invoke(lijstTotaal, bijItem, individueleVoortgang); }
/// <summary> /// Genereer een presentatie aan de hand van meegegeven Liturgie en Template voor de Liederen /// </summary> public void GeneratePresentation() { _token = new CancellationTokenSource(); StatusWijziging?.Invoke(Status.Gestart, null, null); var succes = true; var slidesGemist = 0; var exception = string.Empty; // Hier pas COM calls want dit is de juiste thread using (var applicatie = _mppFactory.GetApplication()) //Creeer een nieuwe lege presentatie volgens de template thema (toon scherm zodat bij fout nog iets te zien is) using (var presentatie = applicatie.Open(_dependentFileList.FullTemplateTheme, metWindow: true)) { //Minimaliseer scherm applicatie.MinimizeInterface(); try { // Voor elke regel in de liturgie moeten sheets worden gemaakt (als dat mag) // Gebruik een list zodat we de plek weten voor de progress var hardeLijst = _liturgie.Where(l => l.VerwerkenAlsSlide).ToList(); foreach (var regel in hardeLijst) { var lijstTotaal = _liturgie.Count(); var bijItem = hardeLijst.IndexOf(regel); var resultaat = _regelVerwerker[regel.VerwerkenAlsType] .Init(applicatie, presentatie, _mppFactory, _liedFormatter, _buildSettings, _buildDefaults, _dependentFileList, _liturgie, _lengteBerekenaar, (p) => Voortgang?.Invoke(lijstTotaal, bijItem, p)) .Verwerk(regel, Volgende(_liturgie, regel), _token.Token); slidesGemist += resultaat.SlidesGemist; if (_stop) { break; } } //sla de presentatie op presentatie.OpslaanAls(_opslaanAls); } catch (Exception ex) { succes = false; exception = ex.ToString(); FoutmeldingSchrijver.Log(exception); } } _token = null; // dispose voordat we een statuswijziging hebben, anders is de applicatie niet op tijd gesloten if (succes) { // gereedmelding geven if (_stop) { StatusWijziging?.Invoke(Status.StopFout, "Tussentijds gestopt door de gebruiker.", null); } else { StatusWijziging?.Invoke(Status.StopGoed, null, slidesGemist); } } else { StatusWijziging?.Invoke(Status.StopFout, exception, null); } }