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;

}

}