public static int getMaxCount(Fotografia foto) { int count = 0; // "2012-10-29.Gio\\EDOARDO.Fot" string subDirFileOrig = Path.GetDirectoryName(foto.nomeFile); // "2012-10-29.Gio\\EDOARDO.Fot\\.Thumb" string subDirFileProvino = Path.Combine(subDirFileOrig, PathUtil.THUMB); // "2012-10-29.Gio\EDOARDO.Fot\.Modif" string subDirFileRisult = Path.Combine(subDirFileOrig, PathUtil.MODIF); FileInfo fileInfoSrc = new FileInfo(foto.nomeFile); if (isClone(foto)) { fileInfoSrc = getOriginalFileNameFromClone(foto); } // "e (10).jpg" string nomeFileOrig = fileInfoSrc.Name; // "e (10)" string nomeFileOrigWithoutExtension = Path.GetFileNameWithoutExtension(nomeFileOrig); count = getMaxCount(Path.Combine(Configurazione.cartellaRepositoryFoto, subDirFileOrig), nomeFileOrigWithoutExtension); return(count); }
private async void CrearFoto(string ruta, string codigo) { Fotografia fotografia = new Fotografia() { perfil = true, pieza = codigo, ruta = ruta, tipo = 1 }; Task t = Task.Factory.StartNew(() => fotografia.guardar()); await t; if (!Error.isActivo()) { if (ruta != "") { ImageSource imageSource = new BitmapImage(new Uri(fotografia.ruta)); foto.Source = imageSource; } } else { MessageBox.Show("Ocurrio un error al subir la fotografia"); } }
public async Task <Fotografia> AddFotografia(Fotografia value) { await context.Fotografia.AddAsync(value); context.SaveChanges(); return(value); }
public void ricercaTest() { ParamCercaFoto param = new ParamCercaFoto(); param.giornataIniz = new DateTime(2000, 1, 1); param.giornataFine = new DateTime(2299, 12, 31); using (LumenEntities dbContext = new LumenEntities()) { Evento ev = dbContext.Eventi.First(); Fotografo op = dbContext.Fotografi.First(); Fotografia f = dbContext.Fotografie.First(); f.evento = ev; f.fotografo = op; f.faseDelGiorno = (short)FaseDelGiorno.Mattino; f.didascalia = "W IL POLLO ARROSTO"; dbContext.SaveChanges(); param.numeriFotogrammi = "3, 5, 7," + f.numero; param.eventi = new Evento[] { ev }; param.fotografi = new Fotografo [] { op }; param.fasiDelGiorno = new FaseDelGiorno [] { FaseDelGiorno.Mattino, FaseDelGiorno.Sera }; param.didascalia = "%POLLO%"; // Ricerca like IList <Fotografia> ris = _impl.cerca(param); Assert.IsTrue(ris.Count > 0); Console.WriteLine(ris.Count); } }
T findComponentFromTemplate <T>(Fotografia f, string nomeComponente) { // Per ricavare il componente desiderato, devo fare diversi passaggi // 2. dalla foto ricavo il ListBoxItem che la contiene ContentPresenter contentPresenter; var test = itemsControl.ItemContainerGenerator.ContainerFromItem(f); if (test is ContentControl) { // 3. dal ListBoxItem ricavo il suo ContentPresenter ContentControl listBoxItem = (ContentControl)test; contentPresenter = AiutanteUI.FindVisualChild <ContentPresenter>(listBoxItem); } else { // IL componente è già avvolto direttamente nel presenter contentPresenter = (ContentPresenter)test; } // 4. con il ContentPresenter ricavo il DataTemplate (del singolo elemento) DataTemplate dataTemplate = contentPresenter.ContentTemplate; // 5. con il DataTemplate ricavo l'Image contenuta return((T)dataTemplate.FindName(nomeComponente, contentPresenter)); }
// ------------------ void associareFacciaFotografo() { // La foto la prendo da quella selezionata if (targetMode != TargetMode.Singola) { throw new InvalidOperationException("Operazione solo su singola foto"); } if (selettoreFotografoViewModelFaccia.countElementiSelezionati != 1) { throw new InvalidOperationException("Non è stato selezionato un Fotografo"); } Fotografia fotografia = getListaFotoTarget().Single(); Fotografo fotografo = selettoreFotografoViewModelFaccia.fotografoSelezionato; AiutanteFoto.setImmagineFotografo(fotografia, fotografo); string msg = string.Format("Impostata immagine per faccia fotografo {0}\nCon la foto numero {1}", fotografo.cognomeNome, fotografia.numero); _giornale.Info(msg); // Spengo la selezione per la prossima volta selettoreFotografoViewModelFaccia.fotografiCW.deselezionaTutto(); dialogProvider.ShowMessage(msg, "Operazione riuscita"); }
/// <summary> /// Elimina tutte le Correzioni da una foto e quindi ricrea il provino /// </summary> public void tornaOriginale(Fotografia fotografia, bool salvare) { fotografia.correzioniXml = null; // Rimuovo anche eventuale file su disco string nomeFileRis = PathUtil.nomeCompletoRisultante(fotografia); if (File.Exists(nomeFileRis)) { File.Delete(nomeFileRis); } // Rilascio memoria AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Tutte); AiutanteFoto.creaProvinoFoto(fotografia); // Le due foto grandi le rilascio per non intasare la memoria qualora questo metodo è chiamato più volte AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Originale); AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Risultante); if (salvare) { Fotografia f = fotografia; fotografieRepositorySrv.update(ref f, true); fotografieRepositorySrv.saveChanges(); // Persisto nel db le modifiche // Devo informate tutti che questa foto è cambiata FotoModificateMsg msg = new FotoModificateMsg(this, fotografia); pubblicaMessaggio(msg); } }
void provinatore_ProgressChanged(object sender, ProgressChangedEventArgs e) { Fotografia foto = (Fotografia)e.UserState; bool esistevaRisultante = foto.imgRisultante != null; // Rilascio memoria AiutanteFoto.disposeImmagini(foto, IdrataTarget.Tutte); AiutanteFoto.creaProvinoFoto(foto); // Le due foto grandi le rilascio per non intasare la memoria qualora questo metodo è chiamato più volte AiutanteFoto.disposeImmagini(foto, IdrataTarget.Originale); AiutanteFoto.disposeImmagini(foto, IdrataTarget.Risultante); bool esisteRisultante = foto.imgRisultante != null; // Siccome è molto probabile che venga idratata l'immagine risultante e siccome sono in un loop, // non posso tenere in memoria tanta roba, altrimenti esplode if (esisteRisultante && !esistevaRisultante) { // Significa che l'ho idratata io in questo momento AiutanteFoto.disposeImmagini(foto, IdrataTarget.Risultante); } // Avviso tutti che questa foto è cambiata FotoModificateMsg msg = new FotoModificateMsg(this, foto); pubblicaMessaggio(msg); }
public void tornaOriginale(IEnumerable <Fotografia> fotografie, bool salvare) { foreach (Fotografia fotografia in fotografie) { fotografia.correzioniXml = null; // Rimuovo anche eventuale file su disco string nomeFileRis = PathUtil.nomeCompletoRisultante(fotografia); if (File.Exists(nomeFileRis)) { File.Delete(nomeFileRis); } // Rilascio memoria AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Tutte); if (salvare) { Fotografia f = fotografia; fotografieRepositorySrv.update(ref f, true); fotografieRepositorySrv.saveChanges(); // Persisto nel db le modifiche } } // Rifaccio tutti i provini in background provinare(fotografie); }
public Fotografia GetFotografia(int idfoto) { Fotografia fotografia = new Fotografia(); using (MySqlConnection conn = GetConnection()) { conn.Open(); MySqlCommand cmd = new MySqlCommand("SELECT * FROM qryfotos WHERE idfoto=@idfoto", conn); cmd.Parameters.AddWithValue("@idfoto", idfoto); using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { fotografia = new Fotografia() { idFoto = reader.GetInt32("idfoto"), foto = reader.GetString("foto"), idCinturon = reader.GetInt32("idCinturon"), cinturon = reader.GetString("cinturon"), idTipotecnica = reader.GetInt32("idTipotecnica"), tipotecnica = reader.GetString("tipotecnica"), idtecnica = reader.GetInt32("idtecnica"), tecnica = reader.GetString("tecnica"), idusuario = reader.GetInt32("idusuario"), email = reader.GetString("email"), idioma = reader.GetInt32("idioma"), imagen = reader.GetString("imagen") }; } } } return(fotografia); }
public void addFotografia(Fotografia foto) { if (!fotografie.Contains(foto)) { fotografie.Add(foto); } }
private byte[] getImage(Guid fotografiaId, IdrataTarget quale) { byte[] bytes = null; using (new UnitOfWorkScope()) { var srv = LumenApplication.Instance.getServizioAvviato <IEntityRepositorySrv <Fotografia> >(); Fotografia fotografia = srv.getById(fotografiaId); string nomeFileImg; // Qui faccio una piccola miglioria: Se l'immagine risultante ha delle correzioni non ancora applicate, le applico adesso. if (quale == IdrataTarget.Risultante) { nomeFileImg = AiutanteFoto.idrataImmagineDaStampare(fotografia); } else { nomeFileImg = AiutanteFoto.idrataImmaginiFoto(fotografia, quale); } bytes = File.ReadAllBytes(nomeFileImg); AiutanteFoto.disposeImmagini(fotografia, IdrataTarget.Tutte); } return(bytes); }
public static Fotografia getFotografiaById(int idFotografia) { Fotografia fotografia = new Fotografia(); SqlConnection connection = null; try { connection = ConexionBD.getConnection(); if (connection != null) { SqlCommand command; SqlDataReader dataReader; String query = String.Format("SELECT * FROM Fotografia WHERE idFotografia = {0}", idFotografia); command = new SqlCommand(query, connection); dataReader = command.ExecuteReader(); while (dataReader.Read()) { fotografia.IdFotografia = (!dataReader.IsDBNull(0)) ? dataReader.GetInt32(0) : 0; fotografia.RutaArchivo = (!dataReader.IsDBNull(1)) ? dataReader.GetString(1) : ""; fotografia.IdReporte = (!dataReader.IsDBNull(2)) ? dataReader.GetInt32(2) : 0; } dataReader.Close(); command.Dispose(); } } catch (Exception e) { Console.WriteLine(e.Message); throw; } return(fotografia); }
public List <Fotografia> ObtenerFotosOfertaAccesorio(int idOferta) { List <Fotografia> resultado = new List <Fotografia>(); string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString(); Engine engine = new Engine(connectionString); StringBuilder query = new StringBuilder(); query.Append("select Id, RutaFoto "); query.Append(" from fotosaccesorios "); query.Append(" where fechabaja is null "); query.Append(" and IdOferta = " + idOferta); DataTable table = engine.Query(query.ToString()); foreach (DataRow dr in table.Rows) { Fotografia fotografia = new Fotografia(); fotografia.Id = int.Parse(dr["Id"].ToString()); fotografia.RutaFoto = dr["RutaFoto"].ToString(); resultado.Add(fotografia); } return(resultado); }
public string Avatar(string size = "30") { this.SetURL(this.GetURL()); if (VisitanteID == 0 || Fotografia == null || Fotografia.Trim() == "") { return("http://api.ning.com/files/XDvieCk-6Hj1PFXyHT13r7Et-ybLOKWFR9fYd15dBrqFQHv6gCVuGdr4GYjaO0u*h2E0p*c5ZVHE-H41wNz4uAGNfcH8LLZS/top_8_silhouette_male_120.jpg?width=" + size); } if (empresaId == 0) { EmpresaSecurity <SecurityContext> security = new EmpresaSecurity <SecurityContext>(); Sessao sessaoCorrente = security.getSessaoCorrente(sessionId); if (sessaoCorrente == null) { return("http://api.ning.com/files/XDvieCk-6Hj1PFXyHT13r7Et-ybLOKWFR9fYd15dBrqFQHv6gCVuGdr4GYjaO0u*h2E0p*c5ZVHE-H41wNz4uAGNfcH8LLZS/top_8_silhouette_male_120.jpg?width=" + size); } empresaId = sessaoCorrente.empresaId; } FileInfo f = new FileInfo(HttpContext.Current.Server.MapPath("~/Users_Data/Empresas/" + empresaId.ToString() + "/Visitante/" + Fotografia)); if (f.Exists) { return(URL + "/Users_Data/Empresas/" + empresaId.ToString() + "/Visitante/" + Fotografia); } else { return("http://api.ning.com/files/XDvieCk-6Hj1PFXyHT13r7Et-ybLOKWFR9fYd15dBrqFQHv6gCVuGdr4GYjaO0u*h2E0p*c5ZVHE-H41wNz4uAGNfcH8LLZS/top_8_silhouette_male_120.jpg?width=" + size); } }
public List <Fotografia> ObtenerFotosUsuario(int idUsuario) { List <Fotografia> resultado = new List <Fotografia>(); string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString(); Engine engine = new Engine(connectionString); StringBuilder query = new StringBuilder(); query.Append("select Id, RutaFoto, EsPrincipal "); query.Append(" from fotos "); query.Append(" where fechabaja is null "); query.Append(" and IdUsuario = " + idUsuario); query.Append(" order by EsPrincipal desc "); DataTable table = engine.Query(query.ToString()); foreach (DataRow dr in table.Rows) { Fotografia fotografia = new Fotografia(); fotografia.Id = int.Parse(dr["Id"].ToString()); fotografia.RutaFoto = dr["RutaFoto"].ToString(); fotografia.EsPrincipal = (dr["EsPrincipal"].ToString().Equals("1") ? true : false); resultado.Add(fotografia); } return(resultado); }
public Fotografia ObtenerFotoPrincipalOferta(int idOferta) { Fotografia resultado = new Fotografia(); string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString(); Engine engine = new Engine(connectionString); StringBuilder query = new StringBuilder(); query.Append("select Id, RutaFoto, EsPrincipal "); query.Append(" from fotosaccesorios "); query.Append(" where fechabaja is null "); query.Append(" and IdOferta = " + idOferta + " "); query.Append(" and EsPrincipal = 1"); DataTable table = engine.Query(query.ToString()); foreach (DataRow dr in table.Rows) { resultado.Id = int.Parse(dr["Id"].ToString()); resultado.RutaFoto = dr["RutaFoto"].ToString(); resultado.EsPrincipal = (dr["EsPrincipal"].ToString().Equals("1") ? true : false); } return(resultado); }
public static void disposeImmagini(Fotografia foto, IdrataTarget quale) { // evito errori if (foto == null) { return; } if (quale == IdrataTarget.Tutte || quale == IdrataTarget.Originale) { if (foto.imgOrig != null) { foto.imgOrig.Dispose(); foto.imgOrig = null; } } if (quale == IdrataTarget.Tutte || quale == IdrataTarget.Provino) { if (foto.imgProvino != null) { foto.imgProvino.Dispose(); foto.imgProvino = null; } } if (quale == IdrataTarget.Tutte || quale == IdrataTarget.Risultante) { if (foto.imgRisultante != null) { foto.imgRisultante.Dispose(); foto.imgRisultante = null; } } }
public static IdrataTarget qualeImmagineDaStampare(Fotografia foto) { // Se ho delle correzioni, allora devo usare il file Risultante. Se non ho modifiche, allora uso l'originale. IdrataTarget quale = (foto.correzioniXml == null ? IdrataTarget.Originale : IdrataTarget.Risultante); return(quale); }
/// <summary> /// Questo metodo si può usare spot anche se il servizio non è avviato /// </summary> /// <param name="foto"></param> /// <returns></returns> public String searchBarCode(Fotografia foto) { FileInfo fotoInfo = PathUtil.fileInfoFoto(foto); _giornale.Debug("E' stata richiesta la ricerca del codice a carre sulla foto " + fotoInfo.Name + " Inizio ricerca codici a barre"); String provinoFileName = Path.Combine(Configurazione.cartellaRepositoryFoto, PathUtil.decidiCartellaProvini(foto), fotoInfo.Name); // Prima provo sul provino (che è più veloce) String findBarCode = searchBarCodeExecutable(provinoFileName); // Poi provo anche sulla foto grande originale if (findBarCode == null) { findBarCode = searchBarCodeExecutable(fotoInfo.FullName); } if (findBarCode != null) { _giornale.Info("E' stato trovato il codice a barre sulla foto " + fotoInfo.Name + " BAR_CODE: " + findBarCode); } else { _giornale.Debug("Non è stato trovato alcun codice a basse sulla foto " + fotoInfo.Name); } return(findBarCode); }
/// <summary> /// Rileggo dal db la fotografia. In questo modo, ricopro la proprietà correzioniXml che /// era stata modificata dall'utente applicando delle correzioni che poi non ha confermato. /// </summary> /// <param name="fotografia"></param> public void undoCorrezioniTransienti(Fotografia fotografia) { fotografieRepositorySrv.refresh(fotografia); fotografia.imgProvino = null; // Questo forza la rilettura del provino da disco AiutanteFoto.idrataImmaginiFoto(fotografia, IdrataTarget.Provino); }
public void crudFotografia2() { using (LumenEntities context = new LumenEntities()) { Random r = new Random(); Fotografia f = new Fotografia(); f.id = Guid.NewGuid(); f.didascalia = "Test-" + r.Next(1000, 9999); f.numero = r.Next(1, 1000000); f.nomeFile = "Test"; f.dataOraAcquisizione = DateTime.Now; f.giornata = DateTime.Today; f.fotografo = context.Fotografi.First(); f.evento = context.Eventi.FirstOrDefault(); context.Fotografie.Add(f); int test = context.SaveChanges(); Assert.IsTrue(test > 0); } }
public JsonResult GetTecnica(int idfoto) { BBDDContext context = HttpContext.RequestServices.GetService(typeof(TAE.Context.BBDDContext)) as BBDDContext; Fotografia fotografia = context.GetFotografia(idfoto); Respuestas.RespuestaFotografia respuestaFotografia = new Respuestas.RespuestaFotografia(); respuestaFotografia.respuesta.funcion = "api/fotografiarecuperar"; respuestaFotografia.respuesta.fecha = DateTime.Now; respuestaFotografia.fotografia = fotografia; if (fotografia.idFoto != 0) { respuestaFotografia.respuesta.codigo = 1; respuestaFotografia.respuesta.mensaje = "Fotografia encontrada"; return(Json(respuestaFotografia)); } else { respuestaFotografia.respuesta.codigo = 0; respuestaFotografia.respuesta.mensaje = "Fotografia no encontrada"; return(Json(respuestaFotografia)); } }
public async Task <bool> DeleteFotografia(Fotografia value) { context.Remove(value); await context.SaveChangesAsync(); return(true); }
public static void removeFotografia(Fotografia fotografia) { SqlConnection connection = null; try { connection = ConexionBD.getConnection(); if (connection != null) { SqlCommand command; int idFotografia = fotografia.IdFotografia; String query = String.Format("UPDATE Fotografia SET estado = 'Eliminado' WHERE idFotografia = {0}", idFotografia); command = new SqlCommand(query, connection); command.ExecuteNonQuery(); command.Dispose(); } } catch (Exception e) { Console.WriteLine(e.Message); throw; } finally { connection.Close(); } }
/// <summary> /// Devo gestire la selezione consecutiva quando avviene l'evento SHIFT + CLICK /// Problema da risolvere, è che adesso la selezione può avvenire anche a cavallo di pagine diverse /// Devo spostare tutta questa logica, lato viewModel, non è più compito di questo metodo /// </summary> /// <param name="sender">la ListBox che ha generato l'evento</param> /// <param name="e">evento del bottone del mouse</param> private void LsImageGallery_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // Se non ho il tasto SHIFT premuto, allora non devo fare niente. // Faccio subito questo controllo per evitare altre operazioni più lente e costose. // La stragrande maggioranza dei click, infatti, avviene senza lo shift premuto. // Il limiteA della selezione estesa (quello senza SHIFT), in questo caso, viene gestito dal ViewModel del metodo: fotografie_selezioneCambiata if (Keyboard.IsKeyDown(Key.LeftShift) == false && Keyboard.IsKeyDown(Key.RightShift) == false) { return; } // -- prendo la fotografia su cui ho cliccato Fotografia fotoLimiteB = getSelectedFotografiaOnMouseClick(e); if (fotoLimiteB == null) { return; } // Ok ho cliccato con lo shift, identificando quindi il secondo limite. Lo setto nel viewModel per avare una selezione completa (2 limiti) fotoGalleryViewModel.eseguireSelezioneEstesaCommand.Execute(fotoLimiteB); // Questo evento non è più da gestire perché ci ho già pensato prima nel ViewModel // viceversa, l'ultima foto cliccata riceverebbe un ulteriore click che la spegnerebbe (io invece sto accendendo) e.Handled = true; }
public static void addFotografia(Fotografia fotografia) { SqlConnection connection = null; try { connection = ConexionBD.getConnection(); if (connection != null) { SqlCommand command; String rutaArchivo = fotografia.RutaArchivo; String estado = fotografia.Estado; String query = String.Format("INSERT INTO Fotografia (rutaArchivo, estado) VALUES ('{0}', '{1})", rutaArchivo, estado); command = new SqlCommand(query, connection); command.ExecuteNonQuery(); command.Dispose(); } } catch (Exception e) { Console.WriteLine(e.Message); throw; } finally { connection.Close(); } }
public void addLogo(Fotografia fotografia, Logo logo, bool salvare) { if (logo == null) { // Rimuovo il logo dalle correzioni // Deserializzo la stringa con le eventuali correzioni attuali if (fotografia.correzioniXml != null) { CorrezioniList correzioni = SerializzaUtil.stringToObject <CorrezioniList>(fotografia.correzioniXml); foreach (Correzione c in correzioni) { if (c is Logo) { correzioni.Remove(c); break; } } // Ora serializzo di nuovo fotografia.correzioniXml = SerializzaUtil.objectToString(correzioni); } } else { // Siccome ho reso il logo sommabile, questa operazione in realtà non aggiunge ma sostituisce. addCorrezione(fotografia, logo, salvare); } // Ricalcolo il provino giusto per poterlo visualizzare AiutanteFoto.creaProvinoFoto(fotografia); }
/// <summary> /// Quando clicco con il destro, prima di aprire il menu contestuale, /// seleziono di giallo la foto che sta sotto il puntatore del mouse. /// Mi servirà poi per eseguire le azioni rapide, per esempio per stampare. /// </summary> /// <param name="e">evento click destro del mouse</param> /// <returns>la Fotografia che è stata cliccata e selezionata</returns> private Fotografia SelectItemOnRightClick(System.Windows.Input.MouseButtonEventArgs e) { Fotografia foto = getSelectedFotografiaOnMouseClick(e); fotoGalleryViewModel.selezionareSingola(foto); return(foto); }
public void stampaProviniFotoProviniTest() { using (new UnitOfWorkScope(false)) { LumenEntities dbContext = UnitOfWorkScope.currentDbContext; List <Fotografia> fotos = (from f in dbContext.Fotografie.Include("fotografo") select f).Take(QUANTE).ToList(); //Carico una stampa Provini ParamStampaProvini p = ricavaParamStampaProvini(); p.numeroColonne = 5; p.numeroRighe = 5; p.macchiaProvini = false; _impl.aggiungereStampe(fotos, p); //Carico una stampa Foto ParamStampaFoto p2 = ricavaParamStampaFoto(); CodaDiStampe c1 = new CodaDiStampe(p2, Costanti.NomeStampantePdf); Fotografia foto = (from f in dbContext.Fotografie.Include("fotografo") select f).Take(QUANTE + 1).ToList().Last(); c1.EnqueueItem(new LavoroDiStampaFoto(foto, p2)); c1.Start(); List <Fotografia> fotos2 = (from f in dbContext.Fotografie.Include("fotografo") select f).Take(2 * QUANTE + 1).ToList(); // Carico una stampa Provini ParamStampaProvini p3 = ricavaParamStampaProvini(); p3.numeroColonne = 3; p3.numeroRighe = 4; p3.macchiaProvini = true; fotos2.RemoveRange(0, QUANTE + 1); _impl.aggiungereStampe(fotos2, p3); //Carico una stampa Foto ParamStampaFoto p4 = ricavaParamStampaFoto(); CodaDiStampe c2 = new CodaDiStampe(p4, Costanti.NomeStampantePdf); Fotografia foto2 = (from f in dbContext.Fotografie.Include("fotografo") select f).Take(2 * QUANTE + 2).ToList().Last(); c2.EnqueueItem(new LavoroDiStampaFoto(foto2, p4)); c2.Start(); } while (_contaElaborazioniTerminate != 2) { Thread.Sleep(1000); } Assert.IsTrue(esitoStampa == EsitoStampa.Ok); }