private async void GeneratorCreatePartLogic(int n, int k, int totalParts, int startPart, int countParts) { buttonIcdfaGenerate.Visible = false; labelIcdfaStatus.ForeColor = Color.DarkBlue; labelIcdfaStatus.Text = $"Generating result for {n}x{k}, parts {startPart}..{startPart + countParts - 1} of {totalParts}"; CurrentIcdfaLogic = new IcdfaLogic(n, k, totalParts, startPart, countParts); updaterIcdfa.Enabled = true; //Запускаем таймер который подтягивает изменения в CurrentIcdfaLogic await CurrentIcdfaLogic.StartAsync(); //Запускаем вычисления и ждем их завершения /* Вычисления закончены */ updaterIcdfa.Enabled = false; //Отключаем таймер который подтягивает изменения в CurrentIcdfaLogic UpdateIcdfaOutput(); //Обновляем вывод CurrentIcdfaLogic = null; //Сбрасываем CurrentIcdfaLogic //Если задача подсчета сумарного кол-ва автоматов не завершена //TODO В идеале сделать через CancellationToken if (TotalCountTask != null) { TotalCountTask.GetAwaiter().GetResult(); //Ожидаем завершения подсчета TotalCountTask.Dispose(); //Освобождаем системные ресурсы связанные с задачей TotalCountTask = null; //Сброс } //Восстанавливаем интерфейс buttonIcdfaGenerate.Visible = true; labelIcdfaStatus.Text = string.Empty; }
private async void GeneratorCreatePartLogic(int n, int k, int totalParts, int startPart, int countParts) { buttonIcdfaGenerate.Visible = false; CurrentIcdfaLogic = new IcdfaLogic(n, k, totalParts, startPart, countParts); updaterIcdfa.Enabled = true; //Запускаем таймер который подтягивает изменения в CurrentIcdfaLogic await CurrentIcdfaLogic.StartAsync(); //Запускаем вычисления и ждем их завершения /* Вычисления закончены */ if (textBoxCheck.Text == "meow") { CompleteSoundPlayer.Play(); } else { SystemSounds.Asterisk.Play(); } updaterIcdfa.Enabled = false; //Отключаем таймер который подтягивает изменения в CurrentIcdfaLogic UpdateIcdfaOutput(); //Обновляем вывод //Восстанавливаем интерфейс buttonIcdfaGenerate.Visible = true; tabControlMain.Enabled = true; progressBar1.Visible = false; progressBar1.Value = 0; buttonIcdfaCancel.Visible = false; if (!CurrentIcdfaLogic.CancellationTokenSource.IsCancellationRequested) { // Запись в файл SaveIcdfaPart(); if (checkBoxShutdown.Checked) { shutdown.halt(false, false); } } CurrentIcdfaLogic = null;//Сбрасываем CurrentIcdfaLogic }