public void StateAdminClearDbStart()
        {
            if (_currentState == AppState.AdminClearDbConfirm)
            {
                SetState(AppState.AdminClearDbStart);

                _adminPage.CellWindow.Visibility           = Visibility.Hidden;
                _adminPage.CellOpenReasonWindow.Visibility = Visibility.Hidden;
                _adminPage.ClearDbConfirmWindow.Visibility = Visibility.Hidden;
                _adminPage.UncloseableMsgBox.Visibility    = Visibility.Visible;
                _adminPage.AdminListCanvasBlur.Radius      = 20;
                //button ok hidden
                _adminPage.ButtonOkUMsgBox.Visibility = Visibility.Hidden;
                _adminPage.UMsgBoxTitle.Text          = "Ожидание";
                _adminPage.UMsgBoxMessage.Text        = "Идет процесс очистки БД";

                DbSyncronizer.GetInstance().ClearDatabase();

                StateAdminClearDbFinished();
            }
        }
 private static void OnDbSyncTimer(object source, ElapsedEventArgs e)
 {
     //для исключения одновременных запусков обработки, если предыдущие не завершились
     if (Monitor.TryEnter(TimerDbLocker))
     {
         try
         {
             //попытка синхронизации баз данных, если неудачно то ожидаем следующей
             DbSyncronizer.GetInstance().SyncDatabases();
             //Debug.WriteLine("sync success");
         }
         catch (Exception)
         {
             //log?
             //Debug.WriteLine("sync error");
         }
         finally
         {
             Monitor.Exit(TimerDbLocker);
         }
     }
 }
        public void StateInit()
        {
            SetState(AppState.Init);

            bool.TryParse(ConfigurationManager.AppSettings.Get("InitialSyncMandatory"), out var mandatory);

            try
            {
                SqlMapper.AddTypeMap(typeof(DateTime), DbType.DateTime2);
                //обязательная синхронизация баз данных при старте приложения
                try
                {
                    DbSyncronizer.GetInstance().SyncDatabases();
                }
                catch (Exception)
                {
                    if (mandatory)
                    {
                        throw;
                    }
                }

                //инициализация железа
                InitBarcodeScanner();
                InitCellsController();
                //таймер для периодической синхронизации баз данных
                InitDbSyncTimer();

                StateMainMenu();
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "init error");
                StateInitError(ex is SyncException ? "ошибка синхр. бд" : ex.Message);
            }
        }