私の目標:
- ユーザーがボタンをクリック
- ボタンは myTimeConsumingProcess() を開始します
- 同じページの TextBox は 1 秒に 1 回更新され、プロセスが完了するまで "." が追加されます。
私が持っているもの(これは機能しますが、私が望むものではありません):
- ユーザーがボタンをクリックします myTimeConsumingProcess() を開始するボタン
- 新しいスレッドが myTimeConsumingProcess() を実行します
- ユーザーは「処理中」ページにリダイレクトされます
- ブール値のセッション変数を使用すると、前のページに残されたスレッドがセッション変数を false に切り替えるまで、このページは際限なく更新されます。
これまでのコード:
DatabaseChecker.aspx.cs
protected void btnStartProcess_Click(object sender, EventArgs e)
{
Session["Running"] = true;
Session["TextBoxContent"] = "Beginning myTimeConsumingProcess()...";
Thread thread = new Thread(new ThreadStart(MyTimeConsumingProcess));
thread.Start();
Response.Redirect("Processing.aspx");
}
private void myTimeConsumingProcess()
{
//do stuff!
Session["TextBoxContent"] += "SUCCESS!"
Session["Running"] = false;
}
処理.aspx
毎秒ページを更新します。
<meta http-equiv="refresh" content="1" />
Processing.aspx.cs
スレッド (DatabaseChecker.aspx.cs に残っている) がセッション変数 "Running" を false に変えるまで、このページにとどまり、1 秒ごとに更新します。
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = Session["TextBoxContent"].ToString();
Session["TextBoxContent"] += ".";
if ((bool)Session["Running"] == false)
{
Response.Redirect("DatabaseChecker.aspx");
}
}
私が理解できないことが欲しい:
可能であれば、別のページへのリダイレクトを避け、代わりにボタンがクリックされたページの TextBox を更新したいと思います。プロセスのどこにいるかを示すために、QueryString を使用して同じページにリダイレクトしようとしました。ただし、これは機能しません --- 同じページにリダイレクトするコードに到達し、テキストが更新されますが、プロセスが完了するまで何も起こらないように見えます (スレッドの目的が無効になります)。
、コントロール、およびそれらのコントロールを Threads と組み合わせて使用し、.aspx ページの Async プロパティを true に設定して、考えられる事実上すべての組み合わせを含むUpdatePanel
、考えられるすべての代替手段を試しました。Timer
PageAsyncTask