c# - 在表单加载时使用进度条

标签 c# winforms progress-bar

我正在尝试用 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/

相关文章:

c# - 在 VS 2010 中创建动态项目模板?

c# - 如何在c#中使用FileStream读写.img文件?

c# - 文本框是否将全数字文本保存为长文本或字符串?

jquery-ui - 有没有办法在 jQuery UI Progressbar 中显示百分比数字?

ios - 使用 GCD 计算从后台队列加载数据的百分比

c# - Docker 中的 FileSystemWatcher 不会注意到对本地目录的更改

c# - 使用 Message.GetBody<> 时,仅根据请求反序列化根对象

c# - 如果 ProgressBar 控件的样式为 ProgressBarStyle.Marquee,则 ProgressBar 控件无效

WinForms - 调整大小事件后的操作

android - Android 蜂窝上的持续通知具有不一致的行为