インターネット上には Web の進行状況バーの例が多数ありますが、その多くは推定時間を示しており、タスクの実際の進行状況を正確に反映することはできません。マルチスレッドと ShowModalDialog を組み合わせて、リアルタイムの進行状況バーを作成しました。原理は非常に単純です。スレッドを使用して長期タスクを開始し、セッションを定義し、タスクがさまざまな段階に進むときにセッションの値を変更します。 、ShowModalDialog を使用して、スレッドの開始時にスレッドを開きます。進行状況バー ウィンドウは、セッション値を取得してリアルタイムの進行状況を反映するために常に更新されます。具体的なコードを見てみましょう: (記事の最後にあるソース コードをダウンロードします)
まず、新しい Default.aspx ページを作成します。
クライアント コード:
名前空間 WebProgressBar
を使用します。
{
/**//// <概要>
/// _Default の概要説明。
/// 概要>
パブリック クラス _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(オブジェクト送信者、System.EventArgs e)
{
// ページを初期化するためのユーザー コードをここに入力します
デザイナー
が生成したコード#region Web フォーム デザイナーが生成したコード
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: この呼び出しは ASP.NET Web フォーム デザイナに必要です。
//
InitializeComponent();
Base.OnInit(e);
}
/**//// <概要>
/// デザイナーのサポートに必要なメソッド - 変更しないでください
/// このメソッドの内容をコード エディターで表示します。
/// 概要>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += 新しい System.EventHandler(this.Page_Load)
;
#endregion
private void LongTask()
{
//長期的なタスクをシミュレートする
//各ループ シミュレーション タスクは異なるステージに進みます
for(int i=0;i<11;i++)
{
System.Threading.Thread.Sleep(1000);
//現在の進行状況を表示するために各ステージの状態値を設定します
セッション["状態"] = i+1;
}
//タスク終了
Session["State"] = 100;
}
public static void OpenProgressBar(System.Web.UI.Page Page)
{
StringBuilder sbScript = new StringBuilder();
sbScript.Append("n");
Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
private
void Button1_Click(オブジェクト送信者, System.EventArgs e)
{
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));
スレッド.スタート();
セッション["状態"]=1;
OpenProgressBar(this.Page);
}
}
}
新しいプログレス バー ページ Progress.aspx を作成する
クライアント:
名前空間 WebProgressBar
を使用します。
{
/**//// <概要>
/// 進行状況の概要説明。
/// 概要>
パブリック クラス Progress : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblMessages;
protected System.Web.UI.WebControls.Panel パネル進行状況;
protected System.Web.UI.WebControls.Panel パネルバーサイド;
protected System.Web.UI.WebControls.Label lblPercent;
プライベート int 状態 = 0;
private void 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("","");
}
if(状態==100)
{
this.panelProgress.Visible = false;
this.panelBarSide.Visible = false;
this.lblMessages.Text = "タスクが完了しました!";
Page.RegisterStartupScript("","");
}
デザイナー
が生成したコード#region Web フォーム デザイナーが生成したコード
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: この呼び出しは ASP.NET Web フォーム デザイナに必要です。
//
InitializeComponent();
Base.OnInit(e);
}
/**//// <概要>
/// デザイナーのサポートに必要なメソッド - 変更しないでください
/// このメソッドの内容をコード エディターで表示します。
/// 概要>
private void InitializeComponent()
{
this.Load += 新しい System.EventHandler(this.Page_Load)
;
#エンドリージョン
}
}
ソースコードのダウンロード: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html