在我的 MainForm 上,我启动了一个线程,它执行一些与 SQL 相关的工作。同时,我希望显示一个带有进度条的新表单,以确认程序仍在响应。我遇到的问题是进度条没有显示正确的值。我希望进度条一遍又一遍地从最小值变为最大值,只是为了确保用户不会卡住程序。然而,进度条并没有按照我想要的方式出现,因为它在达到最大值的 2/3 时会重置。所以进度条显示的值从最小值到最大值的 2/3。下面是进度条重置为的图片Value = 0;
MainForm 包含以下代码:
List<Table> ContentList = new List<Table>();
using (ConnectingForm CF = new ConnectingForm())
{
CF.StartPosition = FormStartPosition.Manual;
CF.Show(this);
Thread thread = new Thread(() => { ContentList = DBL.LoadSQLData(); });
thread.Start();
DBL.SQLdone = false;
while (!DBL.SQLdone);
this.Focus();
CF.Hide();
}
ConnectingForm 具有以下代码:
public ConnectingForm()
{
InitializeComponent();
progressBar1.Value = 0;
progressBar1.Minimum = 0;
progressBar1.Maximum = 50;
progressBar1.Step = 1;
timer1.Interval = 25;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < progressBar1.Maximum)
progressBar1.PerformStep();
else
progressBar1.Value = 0;
}
我还尝试在 while 循环中设置 Progressbar 的值。但是问题仍然存在:UI 没有显示进度条值增加的最后 1/3 的动画。目前,代码如下所示:
主窗体:
...
Thread thread = new Thread(() => { ContentList = DBL.LoadSQLData(); });
thread.Start();
DBL.SQLdone = false;
while (!DBL.SQLdone)
{
if (CF.Value == CF.Maximum)
CF.Value = 0;
else
CF.Value += 1;
Thread.Sleep(100);
}
...
虽然 ConnectingForm 看起来像这样:
public ConnectingForm()
{
InitializeComponent();
progressBar1.Value = 0;
progressBar1.Minimum = 0;
progressBar1.Maximum = 20;
progressBar1.Step = 1;
}
public int Value
{
set { progressBar1.Value = value; }
get { return progressBar1.Value; }
}
public int Maximum
{
get { return progressBar1.Maximum; }
}
仍然给出相同的结果。进度条只显示值 0 到 2/3,然后重置。
我希望有人可以帮助我弄清楚我做错了什么。提前致谢!