private async void Start() { StartTimer(); Enabled = true; try { await UpdateState("Подготовка"); if (!Config.Check()) { throw new Exception("Не заполнены обязательные для заполнения поля"); } using (var connection = SQL.GetSqlConnection()) { await connection.OpenAsync(); await SQL.CreateDatabaseIfNotExists(connection); } if (!Common.CheckFolders()) { var result = MessageBox.Show("Для продолжения работы каталоги логов и временных файлов необходимо очистить, продолжить?", State, MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { await UpdateState("Очистка каталогов"); Common.ClearFolders(); } else { await UpdateState("Отменено"); Enabled = false; StopTimer(); } } await UpdateState("Запуск сбора данных"); TL.StartCollectTechLog(); await UpdateState("Ожидание начала сбора данных"); await TL.WaitStartCollectData(); await SQL.StartCollectSqlTrace(); await UpdateState("Сбор данных"); // Ждем сбора данных await Task.Delay(Config.Get <int>("CollectPeriod") * 60 * 1000); await UpdateState("Остановка сбора данных"); TL.StopCollectTechLog(); await SQL.StopCollectSqlTrace(); await UpdateState("Обработка данных технологического журнала"); await TL.ProcessTechLog(); await UpdateState("Обработка данных Extended Events"); GC.Collect(); await SQL.ProcessSqlTrace(); await UpdateState("Загрузка результатов обработки в базу данных"); GC.Collect(); await SQL.LoadTechLogIntoDatabase(); await SQL.LoadSqlTraceIntoDatabase(); if (Config.Get <bool>("ClearFoldersAfter")) { await UpdateState("Очистка каталогов"); Common.ClearFolders(); } await UpdateState("Выполнено"); GC.Collect(); } catch (Exception ex) { await UpdateState("Ошибка"); MessageBox.Show(ex.Message); } StopTimer(); Enabled = false; }