public void accodaStampaFoto(Fotografia foto, ParamStampaFoto param) { if (param.nomeStampante == null) { param.nomeStampante = ricavaStampante(param.formatoCarta); } CodaDiStampe codaDiStampe = ricavaCodaDiStampa(param); // Creo un nuovo lavoro di stampa e lo aggiungo alla coda. LavoroDiStampaFoto lavoro = new LavoroDiStampaFoto(foto, param); codaDiStampe.EnqueueItem(lavoro); }
/** * Pronto per stampare */ protected override void ProcessItem(LavoroDiStampa lavoroDiStampa) { //check if the user called Stop if (StopRequested) { _giornale.Info("Stampa stoppata dall'utente"); _giornale.InfoFormat("Thread di stampa terminato durante il lavoro '{0}'.", lavoroDiStampa.ToString()); return; } // Inizio a stampare lavoroDiStampa.stato = LavoroDiStampa.Stato.InEsecuzione; // Per evitare problemi di multi-thread, le immagini le idrato nello stesso thread con cui le manderò in stampa. // Non anticipare questo metodo altrimenti poi non va. // Se le immagini non sono idratate, le carico! ParamStampa param = null; if (lavoroDiStampa is LavoroDiStampaFoto) { LavoroDiStampaFoto lavoroDiStampaFoto = lavoroDiStampa as LavoroDiStampaFoto; //Rinstanzio il stampatore che potrebbe essere di un tipo differente dal mio LavoroDiStampaFoto lsp = (LavoroDiStampaFoto)lavoroDiStampa; param = lsp.param; } else if (lavoroDiStampa is LavoroDiStampaProvini) { LavoroDiStampaProvini lavoroDiStampaProvini = lavoroDiStampa as LavoroDiStampaProvini; /* li carico dopo in modo diverso * foreach (Fotografia fot in lavoroDiStampaProvini.fotografie) * { * AiutanteFoto.idrataImmagineDaStampare( fot ); * } */ //Rinstanzio il stampatore che potrebbe essere di un tipo differente dal mio LavoroDiStampaProvini lsp = (LavoroDiStampaProvini)lavoroDiStampa; param = lsp.param; } else if (lavoroDiStampa is LavoroDiStampaTessera) { LavoroDiStampaTessera lavoroDiStampaTessera = lavoroDiStampa as LavoroDiStampaTessera; param = lavoroDiStampaTessera.param; } // Se sono cambiati i parametri istanzio nuovamente lo stampatore. if (_stampatore == null || !param.GetType().IsAssignableFrom(_stampatore.tipoParamGestito)) { _stampatore = ImagingFactory.Instance.creaStampatore(param, param.nomeStampante); } EsitoStampa esito = _stampatore.esegui(lavoroDiStampa); lavoroDiStampa.esitostampa = esito; lavoroDiStampa.stato = LavoroDiStampa.Stato.Completato; StampatoMsg eventArgs = new StampatoMsg(lavoroDiStampa); eventArgs.descrizione = lavoroDiStampa.ToString(); eventArgs.esito = lavoroDiStampa.esitostampa == EsitoStampa.Ok ? Esito.Ok : Esito.Errore; if (stampaCompletataCallback != null) { stampaCompletataCallback.Invoke(this, eventArgs); } }