예제 #1
0
        static void Main(string[] args)
        {
            Timer             temporizador    = CreaTemporizadorReloj();
            FlagTaskCancelled finalizaLectura = new FlagTaskCancelled()
            {
                IsCancelled = false
            };
            Task t = LeeVocalesAsync(finalizaLectura);

            Console.WriteLine("Pulsa Control + C para interrumpir el proceso.");


            temporizador.Elapsed += (s, e) => {
                temporizador.Interval = 100;
                SituaYDibuja(0, 2, $"{e.SignalTime} ", ConsoleColor.Black, ConsoleColor.White);
            };

            Console.CancelKeyPress += (s, e) =>
            {
                finalizaLectura.IsCancelled = true;
                e.Cancel = true;
            };



            t.Wait();
            SituaYDibuja(0, 10, "", ConsoleColor.White, ConsoleColor.Black);
            Console.WriteLine("Acabado correctamente");
        }
예제 #2
0
        static Task LeeVocalesAsync(FlagTaskCancelled finalizaLectura)
        {
            return(Task.Factory.StartNew(() =>
            {
                Dictionary <char, int> vocalesEncontradas = new Dictionary <char, int>();

                using (FileStream archivo = new FileStream("quijote_reducido.txt", FileMode.Open, FileAccess.Read))
                {
                    using (BinaryReader adaptador = new BinaryReader(archivo, Encoding.UTF8))
                    {
                        IEnumerable <char> texto = adaptador.ReadChars((int)archivo.Length).Where(c => "AEIOU".Contains(char.ToUpper(c)));

                        Console.WriteLine("\n\n\nVocales contabilizadas hasta el momento...");

                        double contadorPorcentaje = 0;
                        foreach (var v in texto)
                        {
                            double porcentaje = (contadorPorcentaje / texto.ToArray().Length) * 100;

                            if (!finalizaLectura.IsCancelled)
                            {
                                if (vocalesEncontradas.ContainsKey(char.ToUpper(v)))
                                {
                                    SituaYDibuja(0, 5, vocalesEncontradas.OrderBy(par => par.Key)
                                                 .Aggregate("", (s, x) => s += $"La vocal {char.ToUpper(x.Key)} aparece {x.Value} veces.\n"),
                                                 ConsoleColor.Black, ConsoleColor.White);

                                    if (!finalizaLectura.IsCancelled)
                                    {
                                        SituaYDibuja((int)Math.Round(porcentaje) + 5, 3, " ", ConsoleColor.White, ConsoleColor.White);
                                        SituaYDibuja(5, 3, $"{Math.Round(porcentaje)}%", ConsoleColor.White, ConsoleColor.Black);
                                    }

                                    contadorPorcentaje++;


                                    vocalesEncontradas[char.ToUpper(v)] += 1;
                                }
                                else
                                {
                                    vocalesEncontradas.Add(char.ToUpper(v), 0);
                                }

                                System.Threading.Thread.Sleep(2);
                            }
                        }
                    }
                }
            }));
        }