ASP.NET 进度条的制作

制作进度条往往分为两种:

1. 真实的进度条,显示你进程的百分比。这样的话我的做法是给你的初始化函数里面设置几个点,分别取名是干什么的。然后在你跟新的时候进度条并会显示目前正在干什么。当然如果你的电脑很好,初始化很快的话就很难看出来,一闪而过,你可以设置System.Threading.Thread.Sleep(2000)停止两秒来看看效果。

例子如下:

       /*****ProcessMesg为进度页面的一个label显示空间*******/

       SetCurrentThreadCulture();
            LoginProcess loginPro = new LoginProcess();
            loginPro.Show();
            loginPro.ProcessMesg.Text = "Data is initializing...";
            loginPro.Refresh();
            Messager.Instance.Start();
            loginPro.ProcessMesg.Text = "Threads is initializing...";
            loginPro.Refresh();
            loginPro.ProcessMesg.Text = "Interface is initializing...";
            loginPro.Refresh();
            //Load plugin.dll
            // PluginContent.Initialize();
            loginPro.ProcessMesg.Text = "Login to the interface...";//进度的信息
            loginPro.Refresh();//刷新界面,使Label显示最新的进度信息。
            MainForm f = new MainForm();
            Navigater.Inialize(f.TabControl);
            loginPro.Close();// 最后关闭进度界面进入主程序。
            Application.Run(f);

2. 另外一种是在你导入数据等待的时候,你需要显示进度条,往往我们使用一张Gif图片来替代。但是我们往往明明设置了让图片的Visible=true;但是在你导入的时候就是不出现这张图片(也就是没有效果),其中主要的原因是主线程被你数据处理占用了,所以图片显示不出来。其中的解决办法是创建一个新的线程用于处理数据,主线程用于显示图片。最后使用.NET的委托来调用界面的刷新程序。

示例代码如下:

public partial class ImportDomBondPriceForm : Form
    {
        private DataTable dt;
        private Thread thread = null;
        private delegate void SetProcessBarUnVisibleDel();
        private SetProcessBarUnVisibleDel unvisibleDel;
        public ImportDomBondPriceForm()
        {
            InitializeComponent();
            unvisibleDel = new SetProcessBarUnVisibleDel(RunCompleted);
        }

        private DataTable LoadPreviewData(string fileName)
        {
            DataSet dataSet = ExcelReader.Read(fileName);
            if (dataSet.Tables.Count > 0)
            {
                DataTable dTable = dataSet.Tables[0];
                for (int i = 0; i < dTable.Columns.Count; i++)
                {
                    if (dTable.Rows[0][i].ToString().Trim() == "")
                    {
                        dTable.Columns.RemoveAt(i);
                        --i;
                    }
                }
                dTable.Rows.RemoveAt(0);
                dTable.Columns[0].ColumnName = "RecordDate";
                dTable.Columns[1].ColumnName = "Brand Name";
                dTable.Columns[2].ColumnName = "ISBN";
                dTable.Columns[3].ColumnName = "Currency";
                dTable.Columns[4].ColumnName = "Evaluation Price";
                return dTable;
            }
            else
            {
                return null;
            }
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == this.openFileDialog.ShowDialog())
            {
                this.txtFileName.Text = openFileDialog.FileName;
                RunStart();
                thread = new Thread(Run);
                thread.Start();
            }
        }

        private void RunCompleted()
        {
            this.pictureBox1.Visible = false;
            GVBind(dt);
        }

        private void RunStart()
        {
            this.pictureBox1.BringToFront();
            this.pictureBox1.Visible = true;
        }

        private void Run()
        {
            dt = LoadPreviewData(txtFileName.Text);
            this.Invoke(unvisibleDel);
        }

        private void GVBind(DataTable dTable)
        {
            dataGridView1.DataSource = dTable;
            dataGridView1.Columns[0].Width = 150;
            dataGridView1.Columns[1].Width = 300;
            dataGridView1.Columns[2].Width = 100;
            dataGridView1.Columns[3].Width = 50;
            dataGridView1.Columns[4].Width = 100;
        }
    }

posted @ 2011-08-15 15:13  永远没有尽头  阅读(1451)  评论(2编辑  收藏  举报