هناك العديد من الأمثلة على أشرطة تقدم الويب على الإنترنت، ولكن العديد منها عبارة عن أوقات تقديرية ولا يمكنها أن تعكس التقدم الحقيقي للمهمة بشكل حقيقي. لقد قمت بدمج مؤشرات الترابط المتعددة وShowModalDialog لإنشاء شريط تقدم في الوقت الفعلي. المبدأ بسيط للغاية: استخدم مؤشر ترابط لبدء مهمة طويلة الأمد، وتحديد جلسة، وتغيير قيمة الجلسة عندما تنتقل المهمة إلى مراحل مختلفة. واستخدم ShowModalDialog لفتح سلسلة الرسائل عند بدايتها، وهي نافذة شريط التقدم، والتي يتم تحديثها باستمرار للحصول على قيمة الجلسة وتعكس التقدم في الوقت الفعلي. دعونا نلقي نظرة على الكود المحدد: (قم بتنزيل الكود المصدري في نهاية المقالة)
قم أولاً بإنشاء صفحة Default.aspx جديدة،
رمز العميل:
<body MS_POSITIONING="GridLayout">
<form id="Form1"method="post" runat="server">
<ر>
<ر>
<asp:Button id="Button1" runat="server" Text="بدء مهمة طويلة!"></asp:Button>
</النموذج>
</الجسم>
رمز جانب الخادم:
باستخدام النظام؛
باستخدام System.Collections؛
باستخدام System.ComponentModel؛
باستخدام System.Data؛
باستخدام System.Drawing؛
باستخدام System.Web؛
باستخدام System.Web.SessionState؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.HtmlControls؛
باستخدام System.Text؛
مساحة الاسم WebProgressBar
{
/**//// <الملخص>
/// وصف ملخص لـ _Default.
/// </الملخص>
الفئة العامة _الافتراضي: System.Web.UI.Page
{
System.Web.UI.WebControls.Button Button1 المحمي؛
Page_Load باطلة خاصة (مرسل الكائن، System.EventArgs e)
{
// ضع رمز المستخدم لتهيئة الصفحة هنا
}
قام مصمم نموذج الويب بإنشاء رمز# المنطقة التعليمات البرمجية التي أنشأها مصمم نموذج الويب
تجاوز OnInit المحمي باطلة (EventArgs e)
{
//
// CODEGEN: هذا الاستدعاء مطلوب من قبل مصمم نموذج ويب ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <الملخص>
/// الطريقة المطلوبة لدعم المصمم - لا تقم بتعديلها
/// محتويات هذه الطريقة مع محرر الكود.
/// </الملخص>
الفراغ الخاص ()InitializeComponent
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load })
;
#endregion
الخاص باطل LongTask ()
{
// محاكاة المهام طويلة المدى
// تنتقل كل مهمة محاكاة حلقة إلى مراحل مختلفة
ل(int i=0;i<11;i++)
{
System.Threading.Thread.Sleep(1000);
// قم بتعيين قيمة الحالة لكل مرحلة لعرض التقدم الحالي
جلسة ["الحالة"] = i+1;
}
// تنتهي المهمة
جلسة ["الحالة"] = 100؛
}
public static void OpenProgressBar(System.Web.UI.Page Page)
{
StringBuilder sbScript = new StringBuilder()
sbScript.Append("<script language='JavaScript' type='text/javascript'>n");
sbScript.Append("<!--n");
// يتطلب دعم IE5.5 أو أعلى
sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; الحوار العرض: 350px; الحافة: مرتفعة; المركز: نعم; مساعدة: لا; يمكن تغيير الحجم: لا; الحالة: لا; التمرير: لا ;');n");
// استخدم window.open أدناه IE5.5
//sbScript.Append("window.open('Progress.aspx','', 'الارتفاع=100, العرض=350, شريط الأدوات =لا, شريط القوائم=لا, أشرطة التمرير=لا, يمكن تغيير الحجم=لا, الموقع=لا, الحالة =no');n");
sbScript.Append("// -->n");
sbScript.Append("</script>n");
Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
}
باطلة خاصة Button1_Click(مرسل الكائن، System.EventArgs e)
{
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));
Thread.Start()
;
OpenProgressBar(this.Page);
}
}
}
إنشاء صفحة شريط تقدم جديدة Progress.aspx
عميل:
أضف <base target="_self"> إلى الرأس
<body MS_POSITIONING="GridLayout">
<form id="Form1"method="post" runat="server">
<asp:Label id="lblMessages" runat="server"></asp:Label>
<asp:Panel id = "panelBarSide" runat = "الخادم" العرض = "300px" BorderStyle = "Solid" BorderWidth = "1px"
اللون الأمامي = "فضي">
<asp:Panel id="panelProgress" runat="server" Width="10px" BackColor="Green"></asp:Panel>
</asp:لوحة>
<asp:Label id="lblPercent" runat="server" ForeColor="Blue"></asp:Label>
</النموذج>
</الجسم>
جانب الخادم:
باستخدام النظام؛
باستخدام System.Collections؛
باستخدام System.ComponentModel؛
باستخدام System.Data؛
باستخدام System.Drawing؛
باستخدام System.Web؛
باستخدام System.Web.SessionState؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.HtmlControls؛
مساحة الاسم WebProgressBar
{
/**//// <الملخص>
/// وصف موجز للتقدم.
/// </الملخص>
تقدم الفئة العامة: System.Web.UI.Page
{
محمية System.Web.UI.WebControls.Label lblMessages;
محمية System.Web.UI.WebControls.Panel PanelProgress؛
محمية System.Web.UI.WebControls.Panel PanelBarSide؛
System.Web.UI.WebControls.Label lblPercent;
حالة كثافة العمليات الخاصة = 0؛
Page_Load باطلة خاصة (مرسل الكائن، System.EventArgs e)
{
// ضع رمز المستخدم لتهيئة الصفحة هنا
إذا (جلسة ["الدولة"]! = فارغة)
{
State = Convert.ToInt32(Session["State"].ToString());
}
آخر
{
جلسة ["الدولة"] = 0؛
}
إذا(حالة>0&&حالة<=10)
{
this.lblMessages.Text = "تعهد المهمة!";
this.panelProgress.Width =state*30;
this.lblPercent.Text = State*10 + "%";
Page.RegisterStartupScript(""،<script>window.setTimeout('window.Form1.submit()',100);</script>");
}
إذا (الحالة==100)
{
this.panelProgress.Visible = false;
this.panelBarSide.Visible = false;
this.lblMessages.Text = "اكتملت المهمة!";
Page.RegisterStartupScript(""،<script>window.cloud();</script>");
}
}
قام مصمم نموذج الويب بإنشاء رمز# المنطقة التعليمات البرمجية التي أنشأها مصمم نموذج الويب
تجاوز OnInit المحمي باطلة (EventArgs e)
{
//
// CODEGEN: هذا الاستدعاء مطلوب من قبل مصمم نموذج ويب ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <الملخص>
/// الطريقة المطلوبة لدعم المصمم - لا تقم بتعديلها
/// محتويات هذه الطريقة مع محرر الكود.
/// </الملخص>
الفراغ الخاص ()InitializeComponent
{
this.Load += new System.EventHandler(this.Page_Load })
;
#endregion
}
}
تنزيل كود المصدر: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html