Метка из значения ProgressBar не отображается - PullRequest
1 голос
/ 17 мая 2019

У меня есть бугл и индикатор выполнения для выполнения mysql SP, и все в порядке для каждой строки из многострочного текстового поля.Итак, я добавил ярлык с ProgressBar.Значение для каждого шага и только просмотр 0% и 100%, НО!Когда я прекращаю обработку с помощью MessageBox, метка показывает мне каждое правильное значение.Я пробовал спать, таймер и до сих пор метка не работает.Кто-нибудь может мне помочь?

foreach (string line in lines)
{
    if (line != "" && estado < 9)
    {
        pms[0].Value = line.Substring(4, line.Length - 4);
        pms[1].Value = estado;
        pms[2].Value = Global.Mid;
        pms[3].Value = "1";
        MySqlCommand command = new MySqlCommand
        {
            Connection = connection,
            CommandType = CommandType.StoredProcedure,
            CommandText = tipo
        };
        command.Parameters.AddRange(pms);
        connection.Open();
        if (command.ExecuteNonQuery() == 1)
        {
            ok++;
            log.WriteLine("Change,{0},{1}", line, estado);
            lines[progressBar1.Value] = "A>" + line;
            BoxList.Lines = lines;
        }
        else
        {
            ko++;
            log.WriteLine("Error,{0},{1}", line, estado);
        }
        connection.Close();
    }
    progressBar1.Increment(1);
    label2.Text = "Completado " +(progressBar1.Value * 100 / lines.Length).ToString() + "%";
    //MessageBox.Show("");
}

Это форма C # windows для рабочего стола Windows 10/7, IDE visual Studio 2017 с фреймворком 4.5.

Я ожидаю, что ярлык покажет мне значения INTот 0% до 100%

1 Ответ

3 голосов
/ 17 мая 2019

Обновления происходят, когда работает цикл обработки сообщений.Ваш код блокирует основной цикл сообщений.

MessageBox() (который является функцией Win32 API, реализующей .NET MessageBox.Show()), работает модальный цикл сообщений.Однако, почти всегда лучше запускать основной цикл сообщений, чем модальный.

В современных версиях C # вы можете использовать async + await, чтобы позволить циклу сообщений работать, пока вы 'жду действий базы данных.Например, есть ожидаемая версия используемой вами функции command.ExecuteNonQuery().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...