예제 #1
0
        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;
        }
예제 #2
0
        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
        }