我想做一个欢迎界面,里面放一个进度条来显示主窗体加载的进度,当主窗体加载完时,也就是进度条的value为100时,欢迎窗口退出,而主窗体出来..怎么做呢??? 该如何得到主窗体加载的进度? 
 希望哪位能给个源码,让偶学习学习...感谢感谢感谢感谢...

解决方案 »

  1.   

    或者开始主窗体就没有加载,等欢迎界面到100之后,设置dialogresult为OK,然后再加载主窗体
      

  2.   

    修改程序的入口 
    program.cs
    [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    //form1是欢迎界面。
                Application.Run(new Form1());
            }
      

  3.   

            #region 后台工作的backgroundworker
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                //进度条具体自己弄
                int progress =5;
                worker.ReportProgress(progress);
                while (progress <= 80)
                {
                    progress += 8;
                    backgroundWorker1.ReportProgress(progress);
                }
            }
            private void backgroundWorker1_ProgressChanged(object sender,
                ProgressChangedEventArgs e)
            {
                toolStripProgressBar1.Value = e.ProgressPercentage;
            }
            //进度条完成后做的事情(关闭欢迎)
            private void backgroundWorker1_RunWorkerCompleted(
                object sender, RunWorkerCompletedEventArgs e)
            {
                ...
            }
      

  4.   

    给你个提示,看看有用吗。
    增加一个展示窗体,进度条放这里,
    然后在后台开始new 主窗体
    在主窗体构造函数中开始计数
    每执行一段语句,增加估计差不多的值
    加载完的时候为100
    然后关闭展示窗体,显示主窗体,
    OK!
      

  5.   

    进度条是一个软件人性化考虑之一,他给用户的感觉就是程序内部在不停的动作,执行到了什么程度,而不是整个界面僵死,以至于用户不知道程序在做什么!  看了好几个WinForm程序了,发现他们对进度条的处理完全失去了进度条的作用。他们都是采用Timer来处理,在线程结束的时候,直接赋值进度条达到100%。和我以前做WebForm程序的时候完全不一样,做WebForm程序的时候,进度条是根据总体数据和每步执行后而计算和更新的。在看了这几个WinForm程序后,我在想:是否所有WinForm程序,在进度条的处理上都不能保证实时进度显示?  其实用Timer来处理,不停的更新进度条只是程序作者偷懒的方法。当然这样的好处就是可以简单化处理进度条,代码量少,不易出错,调试方便。  还有一种方法,就是可以及时更新进度条的数据的。那就是采用事件驱动机制,在子线程中监视复杂处理过程中的设定的事件,及时更新!直接看代码: 程序代码
    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    namespace WindowsApplication1
    {
        /// <summary>
        /// Form1 类
        /// </summary>
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                //用子线程工作
                new System.Threading.Thread(new System.Threading.ThreadStart(StartDownload)).Start();
            }
            //开始下载
            public void StartDownload()
            {
                Downloader downloader = new Downloader();
                downloader.onDownLoadProgress += new Downloader.dDownloadProgress(downloader_onDownLoadProgress);
                downloader.Start();
            }
            //同步更新UI
            void downloader_onDownLoadProgress(long total, long current)
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(new Downloader.dDownloadProgress(downloader_onDownLoadProgress), new object[] { total, current });
                }
                else
                {
                    this.progressBar1.Maximum = (int)total;
                    this.progressBar1.Value = (int)current;
                }
            }
        }    /// <summary>
        /// 下载类(您的复杂处理类)
        /// </summary>
        public class Downloader
        {
            //委托
            public delegate void dDownloadProgress(long total,long current);
            //事件
            public event dDownloadProgress onDownLoadProgress;
            //开始模拟工作
            public void Start()
            {
                for (int i = 0; i < 100; i++)
                {
                    if (onDownLoadProgress != null)
                        onDownLoadProgress(100, i);
                    System.Threading.Thread.Sleep(100);
                }
            }
        }
    }
      

  6.   

    在登录和主窗体中再加一个或者面板。把进度条放在面板上面,并把这个面板设置为不显示,然后加一个时钟控件。点用户点击登录,并且验证通过后,调用时钟控件,激活它,进度条的值可以先设为2,当进度条的值没到100时,时钟就一直运行,这样到了100,就设定时钟停止,再把进度条界面隐藏,再show出主窗体,主要思路就是这样了。