我有一个气泡和进度条,用于执行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%
答案 0 :(得分:3)
更新在消息循环运行时发生。您的代码阻止了主消息循环。
flush()
(这是实现.NET MessageBox()
的Win32 API函数)运行模式消息循环。但是,让主消息循环运行总比运行模式循环好。
在现代版本的C#中,您可以使用MessageBox.Show()
+ async
在等待数据库操作时运行消息循环。例如,您正在使用的await
函数有一个等待版本。