2011-11-12 85 views
1

我有Windows窗體在C#有Datagridview與大號。來自數據庫和一些組合框,文本框和按鈕的記錄。進度條和數據加載

因此,我使用另一種形式有progressbar和backgroundworker,以便mainform的數據加載不會影響最終用戶。

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

如何解決這個..?
或建議其他想法來解決這個問題。

回答

0

在 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刪除在Firstform和寫我的代碼(); 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; 
} 
+0

感謝您的快速回復,但仍然沒有更改輸出。 – aarti

+0

你想顯示一些啓動畫面? – DeveloperX

+0

是的,如果它可以解決問題。 – aarti