进度条和数据加载

时间:2011-11-12 10:47:58

标签: c# datagridview progress-bar backgroundworker

我在C#中使用带有大号的Datagridview的Windows窗体。来自数据库和一些组合框,文本框和按钮的记录。

所以,我使用了另一种具有进度条和后台工作程序的表单,这样主数据的数据加载就不会影响最终用户。

 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和其他控件。

如何解决这个问题..? 或建议其他想法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

删除你在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;
}