Ada banyak contoh bilah kemajuan Web di Internet, namun banyak di antaranya merupakan perkiraan waktu dan tidak dapat benar-benar mencerminkan kemajuan tugas yang sebenarnya. Saya menggabungkan multi-threading dan ShowModalDialog untuk membuat bilah kemajuan waktu nyata. Prinsipnya sangat sederhana: gunakan utas untuk memulai tugas jangka panjang, tentukan Sesi, ubah nilai Sesi saat tugas berlanjut ke tahapan yang berbeda. , dan gunakan ShowModalDialog untuk membuka thread saat dimulai. Jendela bilah kemajuan, yang terus disegarkan untuk mendapatkan nilai Sesi dan mencerminkan kemajuan waktu nyata. Mari kita lihat kode spesifiknya: (Unduh kode sumber di akhir artikel)
Pertama buat halaman Default.aspx baru,
Kode klien:
<body MS_POSITIONING="GridLayout">
<form id="Form1" metode="posting" runat="server">
<br>
<br>
<asp:Button id="Button1" runat="server" Text="Mulai Tugas Panjang!"></asp:Button>
</bentuk>
</tubuh>
Kode sisi server:
menggunakan Sistem;
menggunakan Sistem.Koleksi;
menggunakan Sistem.ComponentModel;
menggunakan Sistem.Data;
menggunakan Sistem.Gambar;
menggunakan Sistem.Web;
menggunakan Sistem.Web.SessionState;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan Sistem.Web.UI.HtmlControls;
menggunakan System.Text;
namespace WebProgressBar
{
/**//// <ringkasan>
/// Deskripsi ringkasan untuk _Default.
/// </ringkasan>
kelas publik _Default : Sistem.Web.UI.Halaman
{
dilindungi System.Web.UI.WebControls.Button Button1;
private void Page_Load(pengirim objek, System.EventArgs e)
{
// Masukkan kode pengguna untuk menginisialisasi halaman di sini
}
Kode yang dibuat oleh Perancang Formulir Web#region Kode yang dibuat oleh Perancang Formulir Web
ganti void OnInit yang dilindungi (EventArgs e)
{
//
// CODEGEN: Panggilan ini diperlukan oleh Perancang Formulir Web ASP.NET.
//
Inisialisasi Komponen();
base.OnInit(e);
}
/**//// <ringkasan>
/// Metode yang diperlukan untuk dukungan Desainer - jangan diubah
/// isi metode ini dengan editor kode.
/// </ringkasan>
kekosongan pribadi InitializeComponent()
{
this.Button1.Click += Sistem baru.EventHandler(this.Button1_Click);
ini.Muat += Sistem baru.EventHandler(ini.Page_Load)
;
#endregion
pribadi kekosongan LongTask()
{
//Simulasikan tugas jangka panjang
//Setiap tugas simulasi loop berlanjut ke tahapan yang berbeda
untuk(int i=0;i<11;i++)
{
Sistem.Threading.Thread.Tidur(1000);
//Tetapkan nilai status setiap tahap untuk menampilkan kemajuan saat ini
Sesi["Negara"] = i+1;
}
//Tugas berakhir
Sesi["Negara"] = 100;
}
public static void OpenProgressBar(Halaman Sistem.Web.UI.Page)
{
StringBuilder sbScript = new StringBuilder();
sbScript.Append("<bahasa skrip='JavaScript' type='teks/javascript'>n");
sbScript.Append("<!--n");
//Membutuhkan dukungan IE5.5 atau lebih tinggi
sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; dialogWidth: 350px; edge: Raised; center: Ya; bantuan: Tidak; dapat diubah ukurannya: Tidak; status: Tidak; gulir: Tidak ;');N");
//Gunakan window.open di bawah IE5.5
//sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status =tidak');n");
sbScript.Tambahkan("// -->n");
sbScript.Append("</script>n");
Halaman.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
}
private void Button1_Click(pengirim objek, System.EventArgs e)
{
Sistem.Threading.Thread thread=Sistem.Threading.Thread baru(Sistem.Threading.ThreadStart(LongTask) baru);
thread.Mulai();
Sesi["Negara"]=1;
OpenProgressBar(halaman ini);
}
}
}
Buat halaman bilah kemajuan baru Progress.aspx
Klien:
Tambahkan <base target="_self"> ke kepala
<badan MS_POSITIONING="GridLayout">
<form id="Form1" metode="posting" runat="server">
<asp:Label id="lblMessages" runat="server"></asp:Label>
<asp:Panel id="panelBarSide" runat="server" Lebar="300px" BorderStyle="Solid" BorderWidth="1px"
Warna Depan="Perak">
<asp:Panel id="panelProgress" runat="server" Lebar="10px" BackColor="Hijau"></asp:Panel>
</asp:Panel>
<asp:Label id="lblPercent" runat="server" ForeColor="Biru"></asp:Label>
</bentuk>
</tubuh>
Sisi server:
menggunakan Sistem;
menggunakan Sistem.Koleksi;
menggunakan Sistem.ComponentModel;
menggunakan Sistem.Data;
menggunakan Sistem.Gambar;
menggunakan Sistem.Web;
menggunakan Sistem.Web.SessionState;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan System.Web.UI.HtmlControls;
ruang nama WebProgressBar
{
/**//// <ringkasan>
/// Deskripsi ringkasan untuk Kemajuan.
/// </ringkasan>
Kemajuan kelas publik : System.Web.UI.Page
{
dilindungi System.Web.UI.WebControls.Label lblMessages;
dilindungi System.Web.UI.WebControls.Panel panelProgress;
dilindungi System.Web.UI.WebControls.Panel panelBarSide;
dilindungi Sistem.Web.UI.WebControls.Label lblPercent;
keadaan int pribadi = 0;
private void Page_Load(pengirim objek, System.EventArgs e)
{
// Masukkan kode pengguna untuk menginisialisasi halaman di sini
if(Sesi["Negara"]!=null)
{
status = Konversi.ToInt32(Sesi["Status"].ToString());
}
kalau tidak
{
Sesi["Negara"]=0;
}
if(negara bagian>0&&negarakan<=10)
{
this.lblMessages.Text = "Pelaksanaan tugas!";
this.panelProgress.Width = status*30;
this.lblPercent.Teks = status*10 + "%";
Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
}
jika(negara bagian==100)
{
this.panelProgress.Visible = salah;
this.panelBarSide.Visible = salah;
this.lblMessages.Text = "Tugas Selesai!";
Page.RegisterStartupScript("","<script>window.close();</script>");
}
}
Kode yang dibuat oleh Perancang Formulir Web#region Kode yang dibuat oleh Perancang Formulir Web
ganti void OnInit yang dilindungi (EventArgs e)
{
//
// CODEGEN: Panggilan ini diperlukan oleh Perancang Formulir Web ASP.NET.
//
Inisialisasi Komponen();
base.OnInit(e);
}
/**//// <ringkasan>
/// Metode yang diperlukan untuk dukungan Desainer - jangan diubah
/// isi metode ini dengan editor kode.
/// </ringkasan>
kekosongan pribadi InitializeComponent()
{
ini.Muat += Sistem baru.EventHandler(ini.Page_Load)
;
#wilayah akhir
}
}
Unduh kode sumber: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html