static void Main(string[] args) { try { var corConsoleDefault = Console.ForegroundColor; var repositorio = new DigitaisRepositorio(); var handler = new IdentificarBiometriaHandler(); var numeroTotalBiometrias = repositorio.RecuperarNumeroTotalBiometrias(); var biometriasPorPagina = (numeroTotalBiometrias / Environment.ProcessorCount) + 10; for (int pagina = 1; pagina <= Environment.ProcessorCount; pagina++) { var biometriasRecuperadas = repositorio.RecuperarPagina(pagina, biometriasPorPagina); handler.AdicionarMecanismoBuscaPara(biometriasRecuperadas); } // Captura da digital (trocar para o que vem da catraca posteriormente) var nitgenMainApi = new NBioAPI(); var possoSair = false; while (!possoSair) { Console.WriteLine("Informe a digital"); NBioAPI.Type.HFIR template; var window = new NBioAPI.Type.WINDOW_OPTION(); nitgenMainApi.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); nitgenMainApi.Capture(out template, 0, window); nitgenMainApi.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); var relogio = new Stopwatch(); relogio.Start(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Identificando....."); Console.ForegroundColor = corConsoleDefault; var resultado = handler.IdentificarBiometria(template); relogio.Stop(); Console.ForegroundColor = ConsoleColor.Green; 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; } } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"ERRO {ex.Message} - {ex.StackTrace}"); throw; } }
public int IdentificarBiometriaV2(NBioAPI.Type.HFIR template) { var relogio = new Stopwatch(); relogio.Start(); Console.WriteLine($"Localizado digital ..."); var repositorio = new DigitaisRepositorio(); var tasks = new ConcurrentDictionary <Guid, Task <int> >(); var numeroTotalBiometrias = repositorio.RecuperarNumeroTotalBiometrias(); var biometriasPorPagina = (numeroTotalBiometrias / Environment.ProcessorCount) + 10; for (int pagina = 1; pagina <= Environment.ProcessorCount; pagina++) { var biometriasRecuperadas = repositorio.RecuperarPagina(pagina, biometriasPorPagina); var buscaNitgen = NitgenBiometriaTaskV2.Novo(biometriasRecuperadas); var task = buscaNitgen.CriarTaskParaIdentificacaoBiometrica(template, biometriasRecuperadas); tasks.TryAdd(buscaNitgen.Id, task); task.Start(); } var cancelation = new CancellationTokenSource(); Task.WaitAll(tasks.Select(t => t.Value).ToArray(), cancelation.Token); 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(); } relogio.Stop(); Console.WriteLine($"Localizado digital em > {relogio.Elapsed.TotalSeconds} segundos"); return(biometria); }