先来一个加载窗体代码

 1  public partial class FrmLoading : Form
 2     {
 3         public BackgroundWorker updateDBWorker=new BackgroundWorker();
 4 
 5         public Action BackgroundWorkAction
 6         {
 7             get;
 8             set;
 9         }
10 
11         public KeyValuePair<int, string> CurrentMsg
12         {
13             set
14             {
15                 this.updateDBWorker.ReportProgress(value.Key, value.Value);
16             }
17         }
18 
19         public FrmLoading()
20         {
21             InitializeComponent();
22             this.updateDBWorker.WorkerReportsProgress = true;
23             this.updateDBWorker.WorkerSupportsCancellation = true;
24             this.updateDBWorker.DoWork += new DoWorkEventHandler(this.backgroundWorker1_DoWork);
25             this.updateDBWorker.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
26             this.updateDBWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
27             lblVer.Text = Properties.Resources.SystemVer;
28         }
29 
30 
31         public void ShowLog(string strLog, int intValue)
32         {
33             if (this.lblLog.InvokeRequired)
34             {
35                 this.lblLog.BeginInvoke(new MethodInvoker(delegate() { ShowLog(strLog, intValue); }));
36             }
37             else
38             {
39                 lblLog.Text = strLog;
40                 this.progressBar1.Value = intValue;
41             }
42         }
43 
44         private void FrmLoading_Load(object sender, EventArgs e)
45         {
46             this.updateDBWorker.RunWorkerAsync();
47         }
48 
49         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
50         {
51             if (this.BackgroundWorkAction != null)
52             {
53                 this.BackgroundWorkAction();
54             }
55             Thread.Sleep(100);
56             if (base.InvokeRequired)
57             {
58                 base.BeginInvoke(new MethodInvoker(delegate
59                 {
60                     base.Close();
61                 }));
62             }
63             else
64             {
65                 base.Close();
66             }
67         }
68 
69         private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
70         {
71             ShowLog((e.UserState == null) ? "" : e.UserState.ToString(), e.ProgressPercentage);
72         }
73 
74         private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
75         {
76         }
77     }
View Code

相关文章: