C# ProgressBar值中的标签不显示

C# ProgressBar值中的标签不显示,c#,.net,winforms,C#,.net,Winforms,我有一个用于执行mysql SP的bucle和progressbar,多行文本框中的每一行都可以正常工作。因此,我添加了一个带有进度条的标签。每个步骤的值,仅查看0%和100%,但是!当我停止处理MessageBox时,标签会显示每个正确的值。我尝试了睡眠,计时器和标签仍然不工作。有人能帮我吗 foreach (string line in lines) { if (line != "" && estado < 9) { pms[0].Val

我有一个用于执行mysql SP的bucle和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("");
}
foreach(行中的字符串行)
{
if(行!=“”&&estado<9)
{
pms[0]。值=行。子字符串(4,行。长度-4);
pms[1]。值=estado;
pms[2].值=全局.Mid;
pms[3]。Value=“1”;
MySqlCommand=newmysqlcommand
{
连接=连接,
CommandType=CommandType.StoredProcess,
CommandText=tipo
};
命令.Parameters.AddRange(pms);
connection.Open();
if(command.ExecuteNonQuery()==1)
{
ok++;
WriteLine(“Change,{0},{1}”,line,estado);
行[progressBar1.Value]=“A>”+行;
行=行;
}
其他的
{
ko++;
WriteLine(“Error,{0},{1}”,第行,estado);
}
connection.Close();
}
1.增量(1);
label2.Text=“Completado”+(progressBar1.Value*100/lines.Length).ToString()+“%”;
//MessageBox.Show(“”);
}
这是一个适用于windows 10/7桌面、IDE visual studio 2017和framework 4.5的C#windows窗体


我希望在消息循环运行时,标签显示0%到100%的INT值。您的代码正在阻止主消息循环

MessageBox()
(这是实现.NET的
MessageBox.Show()
)的Win32 API函数)操作模式消息循环。然而,运行主消息循环几乎总是比运行模式循环好

在C#的现代版本中,您可以使用
async
+
wait
在等待数据库操作时允许消息循环运行。例如,您正在使用的
command.ExecuteNonQuery()
函数有一个值得期待的版本