인터넷에는 웹 진행률 표시줄의 예가 많이 있지만 그 중 상당수는 예상 시간이며 작업의 실제 진행률을 실제로 반영할 수 없습니다. 멀티스레딩과 ShowModalDialog를 결합하여 실시간 진행률 표시줄을 만들었습니다. 원리는 매우 간단합니다. 스레드를 사용하여 장기 작업을 시작하고, 세션을 정의하고, 작업이 다른 단계로 진행될 때 세션 값을 변경합니다. , 그리고 ShowModalDialog를 사용하여 스레드가 시작될 때 스레드를 엽니다. 세션 값을 얻고 실시간 진행 상황을 반영하기 위해 지속적으로 새로 고쳐지는 진행률 표시줄 창입니다. 특정 코드를 살펴보겠습니다. (문서 끝 부분에 있는 소스 코드 다운로드)
먼저 새 Default.aspx 페이지를 만듭니다.
클라이언트 코드:
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="서버">
<br>
<br>
<asp:Button id="Button1" runat="server" Text="긴 작업 시작!"></asp:Button>
</form>
</body>
서버측 코드:
시스템 사용;
System.Collections 사용;
System.ComponentModel 사용;
System.Data 사용;
System.드로잉 사용;
System.Web 사용;
System.Web.SessionState 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.HtmlControls 사용;
System.Text
네임스페이스 WebProgressBar
사용
{
/**//// <요약>
/// _Default에 대한 요약 설명입니다.
/// </summary>
공개 클래스 _Default : System.Web.UI.Page
{
보호된 System.Web.UI.WebControls.Button Button1;
개인 무효 Page_Load(개체 전송자, System.EventArgs e)
{
// 여기에 페이지를 초기화하는 사용자 코드를 넣습니다.
}
웹 양식 디자이너 생성 코드#region 웹 양식 디자이너 생성 코드
보호된 void OnInit(EventArgs e) 재정의
{
//
// CODEGEN: 이 호출은 ASP.NET 웹 양식 디자이너에 필요합니다.
//
초기화구성요소();
base.OnInit(e);
}
/**//// <요약>
/// Designer 지원을 위한 필수 메소드 - 수정하지 마세요.
/// 코드 편집기를 사용하여 이 메서드의 내용을 확인합니다.
/// </summary>
개인 무효 초기화 구성 요소()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load)
}
#endregion
개인 무효 LongTask()
{
//장기 작업 시뮬레이션
//각 루프 시뮬레이션 작업은 서로 다른 단계로 진행됩니다.
for(int i=0;i<11;i++)
{
System.Threading.Thread.Sleep(1000);
//현재 진행 상황을 표시할 각 단계의 상태 값을 설정합니다.
세션["State"] = i+1;
}
//작업 종료
세션["State"] = 100;
}
공개 정적 void OpenProgressBar(System.Web.UI.Page 페이지)
{
StringBuilder sbScript = new StringBuilder()
sbScript.Append("<script 언어='JavaScript' type='text/javascript'>n");
sbScript.Append("<!--n");
//IE5.5 이상 지원 필요
sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px;DialogWidth: 350px; edge:Raised; center: Yes; help: No; resize: No; status: No;scroll:No ;');N");
//IE5.5 이하에서는 window.open을 사용합니다.
//sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, 도구 모음 =no, menubar=no, 스크롤 막대=no, 크기 조정 가능=no, 위치=no, 상태 =아니요');n");
sbScript.Append("// -->n");
sbScript.Append("</script>n");
Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
}
개인 무효 Button1_Click(개체 전송자, System.EventArgs e)
{
System.Threading.Thread 스레드=새 System.Threading.Thread(새 System.Threading.ThreadStart(LongTask));
스레드.시작();
세션["상태"]=1;
OpenProgressBar(this.Page);
}
}
}
새 진행률 표시줄 페이지 Progress.aspx 만들기
고객:
헤드에 <base target="_self"> 추가
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="서버">
<asp:Label id="lblMessages" runat="server"></asp:Label>
<asp:Panel id="panelBarSide" runat="서버" Width="300px" BorderStyle="단색" BorderWidth="1px"
ForeColor="실버">
<asp:Panel id="panelProgress" runat="server" Width="10px" BackColor="Green"></asp:Panel>
</asp:패널>
<asp:Label id="lblPercent" runat="server" ForeColor="Blue"></asp:Label>
</form>
</body>
서버측:
시스템 사용;
System.Collections 사용;
System.ComponentModel 사용;
System.Data 사용;
System.드로잉 사용;
System.Web 사용;
System.Web.SessionState 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.HtmlControls
네임스페이스 WebProgressBar
사용
{
/**//// <요약>
/// Progress에 대한 요약 설명입니다.
/// </summary>
공개 클래스 진행 : System.Web.UI.Page
{
보호된 System.Web.UI.WebControls.Label lblMessages;
protected System.Web.UI.WebControls.Panel panelProgress;
보호된 System.Web.UI.WebControls.Panel panelBarSide;
보호된 System.Web.UI.WebControls.Label lblPercent;
개인 int 상태 = 0;
개인 무효 Page_Load(개체 전송자, System.EventArgs e)
{
// 여기에 페이지를 초기화하는 사용자 코드를 넣습니다.
if(세션["상태"]!=null)
{
state = Convert.ToInt32(Session["State"].ToString());
}
또 다른
{
세션["상태"]=0;
}
if(상태>0&&상태<=10)
{
this.lblMessages.Text = "작업 수행 중입니다!";
this.panelProgress.Width = 상태*30;
this.lblPercent.Text = 상태*10 + "%";
Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
}
if(상태==100)
{
this.panelProgress.Visible = 거짓;
this.panelBarSide.Visible = 거짓;
this.lblMessages.Text = "작업 완료!";
Page.RegisterStartupScript("","<script>window.close();</script>");
}
}
웹 양식 디자이너 생성 코드#region 웹 양식 디자이너 생성 코드
보호된 void OnInit(EventArgs e) 재정의
{
//
// CODEGEN: 이 호출은 ASP.NET 웹 양식 디자이너에 필요합니다.
//
초기화구성요소();
base.OnInit(e);
}
/**//// <요약>
/// Designer 지원을 위한 필수 메소드 - 수정하지 마세요.
/// 코드 편집기를 사용하여 이 메서드의 내용을 확인합니다.
/// </summary>
개인 무효 초기화 구성 요소()
{
this.Load += new System.EventHandler(this.Page_Load)
}
#endregion
}
}
소스코드 다운로드: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html