ASP.NET と C# を使用しており、非常に大きな結果セットを Excel にエクスポートしています。エクスポート コードの実行中に、"読み込み中" のアニメーション GIF を表示して、ユーザーが要求を処理中であることを認識できるようにしたいと考えています。マルチスレッドでこれをやろうとしてきましたが、あまり慣れていません。誰かが私を正しい方向に導くことができますか? ありがとう!
ジョン
ASP.NET と C# を使用しており、非常に大きな結果セットを Excel にエクスポートしています。エクスポート コードの実行中に、"読み込み中" のアニメーション GIF を表示して、ユーザーが要求を処理中であることを認識できるようにしたいと考えています。マルチスレッドでこれをやろうとしてきましたが、あまり慣れていません。誰かが私を正しい方向に導くことができますか? ありがとう!
ジョン
サーバーでマルチスレッドを実行しようとしていますか? 私がお勧めするのは、クライアント側の JavaScript で、サーバーに投稿する前にしばらくお待ちくださいというメッセージをオンにすることです。次に、クライアント側で投稿が完了したら、メッセージをオフにします。
実際のセットアップについて詳しく知らなければ、これ以上のことはできませんが、前回これを実装したときに、次の行に沿って何かを行いました。
JQUERY を使用して PrintLoadingPanel という div があるとします。表示するように div を設定し、ウィンドウを引き継ぎます。
$("#printLoadingPanel")
.css({display:"block",top:"0px",left:"0px",height:screen.availHeight});
次に、印刷が完了したかどうかのチェックを開始する 1/2 秒間隔でタイマーを開始します。小さな PDF を生成してダウンロードするだけなので、より迅速な対応が必要でした。レポートが非常に遅い場合は、これを微調整することをお勧めします。
window.setTimeout(checkIfDoneDownload,500);
次に、CheckIfDoneDownload 関数がサーバーにヒットし、ファイルの生成が完了してダウンロードされたかどうかを確認します。ここでも JQUERY を使用して、AJAX 対応の WCF サービスを呼び出しています。これを PageMethods またはサーバーにコールバックする他の方法で置き換えることができます。
function checkIfDoneDownload()
{
$.ajax({
type: "POST",
url: "../Services/Utilities.svc/IsPrintDownloadDone",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
if (msg.d)
{
$("#printLoadingPanel").css("display","none");
}
else {window.setTimeout(checkIfDoneDownload,500);}
},
error: function (xhr, textStatus, errorThrown) {
if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}
サーバー側では、HTTP ハンドラーを介してダウンロードを生成しています。基本的に、最初にセッション レベル フラグを false に設定し、最後に true に戻します。私のチェックが完了したかどうかのサービスは、フラグの値を返すだけです。
ASP.NET AJAX を使用する立場にある場合は、UpdateProgress
コントロールを (とともにUpdatePanel
) 使用することをお勧めします。
素敵なアニメーション gif 画像が必要な場合は、Ajaxloadをチェックしてください。
レポートの生成で同じ問題に遭遇しました。簡単な解決策は、夜間にレポートを実行してからサーバーに書き込むことです。次に、レポートへのリンクを提供します。