/// <summary>
 /// Puede levantar AbortarEsperarMorirException debido al protocolo Esperar-Morir
 /// </summary>
 /// <param name="transaccion">Transaccion que solicita el bloqueo</param>
 /// <param name="condiciones">Condiciones por la que bloquear</param>
 /// <param name="tipoBloqueo">Tipo de bloqueo que solicita</param>
 /// <returns></returns>
 internal DescriptorBloqueo bloquear(Transaccion transaccion,
                                     Condicion condicion, TipoBloqueo tipoBloqueo)
 {
     lock (Entradas)
     {
         foreach (EntradaBloqueo entrada in Entradas)
         {
             if (entrada.igualCondicion(condicion))
             {
                 if (entrada.permiteBloqueo(condicion, tipoBloqueo))
                 {
                     return(entrada.bloquear(transaccion, tipoBloqueo));
                 }
                 entrada.encolarBloqueo(transaccion); //-> aqui puede leventar exception por protocolo esperar morir
                 while ((entrada.Bloqueado &&
                         !entrada.permiteBloqueo(condicion, tipoBloqueo)) ||
                        !entrada.desencolarSiEsElSiguiente(transaccion))
                 {
                     Monitor.Wait(entradas);
                 }
                 if (tipoBloqueo == TipoBloqueo.BLOQUEO_LECTURA)
                 {
                     Monitor.PulseAll(entradas);//porque no eran los primeros, se volvieron a bloquear
                 }
                 return(entrada.bloquear(transaccion, tipoBloqueo));
             }
         }
         //no estaba la entrada
         EntradaBloqueo nuevaEntrada = new EntradaBloqueo(this, tipoBloqueo, condicion);
         Entradas.Add(nuevaEntrada);
         return(nuevaEntrada.bloquear(transaccion, tipoBloqueo));
     }
 }
Ejemplo n.º 2
0
        async Task ExecuteLoadEntradasCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                Entradas.Clear();
                var items = await EntradaDataStore.GetEntradasAsync(true);

                foreach (var item in items)
                {
                    Entradas.Add(item);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }
Ejemplo n.º 3
0
 private void LerEntradas()
 {
     for (int linha = 0; linha < Linhas; linha++)
     {
         Entradas.Add(LerLinha());
     }
 }
Ejemplo n.º 4
0
        public void AdicionaEntrada(Lancamentos.Lancamento lancamento)
        {
            var entrada = new Lancamento(lancamento.Data, lancamento.Descricao, lancamento.Valor);

            Entradas.Add(entrada);

            Total = Total + entrada.Valor;
        }
 public void AddEntrada(entrada _entrada)
 {
     using (var api = new BusinessContext())
     {
         try
         {
             api.AddEntrada(_entrada);
         }
         catch (Exception ex)
         {
             return;
         }
         Entradas.Add(_entrada);
     }
 }
Ejemplo n.º 6
0
 public void agregarEntrada(Entrada entrada)
 {
     Entradas.Add(entrada);
     SaveChanges();
 }