static void Main(string[] args) { var corConsoleDefault = Console.ForegroundColor; var repositorio = new DigitaisRepositorio(); var handler = new IdentificarBiometriaHandler(); var numeroTotalBiometrias = repositorio.RecuperarNumeroTotalBiometrias(); var biometriasPorPagina = (numeroTotalBiometrias / 10) + 10; for (int pagina = 1; pagina <= 10; pagina++) { var biometriasRecuperadas = repositorio.RecuperarPagina(pagina, biometriasPorPagina); Console.WriteLine($"Thread {pagina} trabalhará com {biometriasRecuperadas.Count()} biometrias..."); handler.AdicionarMecanismoBuscaPara(biometriasRecuperadas); } var possoSair = false; while (!possoSair) { Console.WriteLine("Informe a digital"); var nitgen = new NBioBSP(); IFPData data = nitgen.FPData; IDevice device = nitgen.Device; IExtraction extraction = nitgen.Extraction; device.Open(255); extraction.Capture(); var template = extraction.FIR; device.Close(255); var relogio = new Stopwatch(); relogio.Start(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Identificando....."); Console.ForegroundColor = corConsoleDefault; var resultado = handler.IdentificarBiometriaComCarga(template); relogio.Stop(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Id digital encontrada {resultado} em {relogio.Elapsed.TotalSeconds} segundos"); Console.ForegroundColor = corConsoleDefault; Console.WriteLine(); Console.WriteLine("\nCapturar nova digital?"); var tecla = Console.ReadKey(); if (tecla.Key == ConsoleKey.N) { possoSair = true; } } }
public int IdentificarBiometriaSemCarga(byte[] template) { var relogio = new Stopwatch(); relogio.Start(); Console.WriteLine($"Localizando digital ..."); var repositorio = new DigitaisRepositorio(); var tasks = new Dictionary <Guid, Task <int> >(); var numeroTotalBiometrias = repositorio.RecuperarNumeroTotalBiometrias(); Console.WriteLine($"Abrindo {Environment.ProcessorCount} threads..."); var biometriasPorPagina = (numeroTotalBiometrias / Environment.ProcessorCount) + 10; for (int pagina = 1; pagina <= Environment.ProcessorCount; pagina++) { var biometriasRecuperadas = repositorio.RecuperarPagina(pagina, biometriasPorPagina); var buscaNitgen = NitgenBiometriaTask.Novo(biometriasRecuperadas); var task = buscaNitgen.CriarTaskParaIdentificacaoBiometrica(template, biometriasRecuperadas); //tasks.TryAdd(buscaNitgen.Id, task); tasks.Add(buscaNitgen.Id, task); task.Start(); } // var cancelation = new CancellationTokenSource(); //Task.WaitAll(tasks.Select(t => t.Value).ToArray(), cancelation.Token); while (tasks.Count() > 0) { //var indice = Task.WaitAny(tasks.Select(t => t.Value).ToArray()); var indice = Task.WaitAny(tasks.Select(t => t.Value).ToArray()); //resultado = tasks.Select(t => t.Value).ElementAt(indice).Result; var resultado = tasks.ElementAt(indice); Console.WriteLine($"{resultado.Key} - Terminou com {resultado.Value.Result}"); if (resultado.Value.Result > 0) { relogio.Stop(); Console.WriteLine($"Localizada digital em > {relogio.Elapsed.TotalSeconds} segundos"); return(resultado.Value.Result); } tasks.Remove(resultado.Key); } relogio.Stop(); Console.WriteLine($"Nenhuma digital localizada em > {relogio.Elapsed.TotalSeconds} segundos"); return(0); //var resultado = tasks.FirstOrDefault(x => x.Value.Status == TaskStatus.RanToCompletion && x.Value.Result > 0); //var biometria = resultado.Key == Guid.Empty // ? 0 // : resultado.Value.Result; //foreach (var item in tasks) //{ // item.Value.Dispose(); //} //return biometria; }