ProgressBar值中的标签未出现

时间:2019-05-17 01:25:51

标签: c# .net winforms

我有一个气泡和进度条,用于执行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("");
}

这是Windows 10/7桌面(IDE视觉工作室2017,带有框架4.5)的C#Windows窗体。

我希望标签显示INT值从0%到100%

1 个答案:

答案 0 :(得分:3)

更新在消息循环运行时发生。您的代码阻止了主消息循环。

flush()(这是实现.NET MessageBox()的Win32 API函数)运行模式消息循环。但是,让主消息循环运行总比运行模式循环好。

在现代版本的C#中,您可以使用MessageBox.Show() + async在等待数据库操作时运行消息循环。例如,您正在使用的await函数有一个等待版本。