完了率を示すプログレス バーとキャンセル ボタンを備えたバックグラウンド タスクを実行する必要があります。タスクの詳細はさておき、今のところ、例を機能させたいだけなので、3 つのメイン イベント ハンドラー (DoWork、ProgressChanged、および RunWorkerCompleted) と、カウンターをインクリメントして DoWork で 50 ミリ秒スリープするだけのループを用意します。ただし、最後の1回を除いて更新されません。
Windows フォームでは、バックグラウンド ワーカーを使用していますが、問題なく正しく機能します。この同じコードを使用したいと思います。ただし、ASP.NET が同じ機能を得るには AJAX を使用する必要があるという内容を見てきました。だから私の質問は:
1) バックグラウンド ワーカーを使用するために本当に AJAX が必要ですか?
2)はいの場合、AJAX が必要です。AJAX について何も知らない人が、ASP.NET Web ページでバックグラウンド ワーカーを起動して実行するためにできる最も簡単で最も簡単な方法は何ですか?
3)いいえの場合、AJAX は必要ありません。AJAX を使用していない作業サンプルを教えてもらえますか? バックグラウンドワーカー以外のスレッド化方法を使用していても興味があります。
マルチパートの質問で申し訳ありません!どちらかでお答えいただけると助かります。それが機能する限り、最終的にどの方法を使用するかはあまり気にしません。
.cs ページからの参照用コード:
protected void bwProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
lblProgress.Text = "Task Complete: " + e.Result;
}
protected void bwProcess_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
lblProgress.Text = e.ProgressPercentage.ToString();
}
protected void bwProcess_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i++)
{
if (bwProcess.CancellationPending)
{
lblProgress.Text = "Task Cancelled.";
e.Cancel = true;
return;
}
bwProcess.ReportProgress(i);
Thread.Sleep(50);
}
e.Result = "100%";
}
protected void BWClick(object sender, EventArgs e)
{
lblProgress.Text = "Firing Process...";
bwProcess = new BackgroundWorker();
bwProcess.WorkerReportsProgress = true;
bwProcess.WorkerSupportsCancellation = true;
bwProcess.DoWork += new DoWorkEventHandler(bwProcess_DoWork);
bwProcess.ProgressChanged += new ProgressChangedEventHandler(bwProcess_ProgressChanged);
bwProcess.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwProcess_RunWorkerCompleted);
if (bwProcess != null)
{
bwProcess.RunWorkerAsync("StartAsynchronousProcess");
}
}
その他のメモ: Async="True" と EnableSessionState="ReadOnly" を @Page に入力しました。
前もって感謝します!