我正在尝试用 C# 设计一个 WinForms 控件,它将在加载时从数据库中获取一些数据。
我想用进度条来显示进度。
我试过这段代码(还有许多其他代码):
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Show();
progressBar1.Value = 10;
int n;
n = 50;//number of records in DB ,
double progress = 0;
double progstep = 25 / n;
for (int i = 1; i <= n; i++)
{
//getting
if (progress <= 100)
progressBar1.Value = (int)progress;
}
progressBar1.Value = 35;
n = 100;//number of records in DB for another data reading from DB ,
progress = 35;
progstep = 65 / n;
for (int i = 1; i <= n; i++)
{
//getting data from DB
dataGridView1.Rows.Add(....);
//Adding that data to a datagrid -- parametrs removed.
progress += progress;
if (progress <= 100)
progressBar1.Value = (int)progress;
}
}
但是,问题是表单会一直等到数据读取进度完成,而我只能看到完整的进度条和所有数据已加载。
我应该怎么做才能解决这个问题?
最佳答案
由于这是 winforms,我建议使用 BackgroundWorker .
基本示例:
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.ProgressChanged += new DoWorkEventHandler(bgWorker_ProgressChanged);
bgWorker.RunWorkerAsync(//pass in object to process)
然后将启动:
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
//Do all of your work here
bgWorker.ReportProgress(); //percent done calculation
}
然后将触发 Progress changed 事件以安全地更新 UI:
private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
关于c# - 在表单加载时使用进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17164707/