进度条和数据加载

本文关键字:数据 加载 | 更新日期: 2023-09-27 18:14:25

我有Windows窗体在c#有大数据视图。从数据库和一些组合框,文本框和按钮的记录。

所以,我使用了另一个有进度条和后台工作者的表单,这样主表单的数据加载就不会刺激最终用户。

 public partial class FirstForm : Form
{
    MainForm mf;
    public FirstForm()
    {
        InitializeComponent();
      backgroundWorker1.RunWorkerAsync();
    }
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        mf = new MainForm(); //inside constructor,code of data loading in gridview
        mf.Update();
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (p1.Value < p1.Maximum)         //p1 name for progressbar
            p1.Value++;
        else
        {
            timer1.Enabled = false;
            this.Hide();
            mf.Show();
        }
    }
}

但是当显示主表单时,它是空白的,2/3秒后出现datagridview和其他控件。

如何解决这个问题?
或者提出其他解决方法

进度条和数据加载

删除Firstform中的代码,并将我的代码写入programs.cs

static void Main()
{
    Application.EnableVisualStyles();
    Application.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
    Application.SetCompatibleTextRenderingDefault(false);
        System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();
        bw.DoWork += new System.ComponentModel.DoWorkEventHandler(bw_DoWork);
        bw.WorkerSupportsCancellation = true;
        MainForm = new MainForm(); // creating main form

bw.RunWorkerAsync ();frm.Inittiate ();//将此方法添加到第一个表单中以加载和初始化

        bw.CancelAsync(); // ending splashing
        Application.Run(frm);
}     
static void bw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    AFirstForm splashForm = new FirstForm();
    splashForm.TopMost = true;
    splashForm.Show();
    while (!(sender as System.ComponentModel.BackgroundWorker).CancellationPending)
    {
        splashForm.Refresh();
    }
    splashForm.Close();    
    e.Result = splashForm;
}