/// <summary>
 /// Синхронный запуск сканирования.
 /// </summary>
 public void Start()
 {
     // Статусы.
     InProgress = true;
     Stopped    = false;
     // Перебор подсетей и опрос арендованных айпи-адресов по snmp.
     Logger.AddLog("Определение списка IP-адресов подсетей.");
     foreach (var subnet in subnets)
     {
         try
         {
             subnet.Clients = Dhcp.FindDhcpClients(dncpServer, subnet.Address);
         }
         catch (Exception ex)
         {
             Logger.AddLog(ex.Message);
         }
     }
     ProgressMax   = subnets.Select(x => x.Clients.Count).Sum();
     ProgressValue = 0;
     Logger.AddLog("Опрос IP-адресов.");
     foreach (var subnet in subnets)
     {
         if (subnet.Clients.Any())
         {
             foreach (var addr in subnet.Clients)
             {
                 // Токен остановки выполнения.
                 if (token.IsCancellationRequested)
                 {
                     InProgress = false;
                     Stopped    = true;
                     return;
                 }
                 // Установка прогресса выполнения.
                 ProgressPercent = ++ProgressValue / ProgressMax;
                 // Переменная ответа.
                 SnmpV1Packet response;
                 // Отправка запроса.
                 try
                 {
                     response = SendRequest(addr.Ip);
                 }
                 catch
                 {
                     continue;
                 }
                 // Запись значений.
                 string netname      = response.Pdu.VbList[0].Value.ToString();
                 string model        = response.Pdu.VbList[1].Value.ToString();
                 string serialNumber = response.Pdu.VbList[2].Value.ToString();
                 var    printer      = new Printer(subnet, addr.Ip, model, serialNumber, netname);
                 // Валидация и добавление принтера в репозиторий.
                 List <ValidationResult> results = printer.Validate(new ValidationContext(printer)).ToList();
                 if (!results.Any())
                 {
                     subnet.AddPrinter(printer);
                     DeviceRepository.AddPrinter(printer);
                     Logger.AddLog($"Обнаружен принтер - {printer.Model}, сетевое имя - {printer.NetName}, IP - {printer.Ip}.");
                 }
             }
             if (!DeviceRepository.Subnets.Contains(subnet))
             {
                 DeviceRepository.AddSubnet(subnet);
             }
         }
         else
         {
             Logger.AddLog($"В подсети {subnet.Address} нет арендованных IP адресов.");
         }
     }
     Logger.AddLog("Сканирование завершено.");
     InProgress = false;
     Stopped    = true;
 }