質問

私は、ASP.NETとC#を使用していますし、Excelに設定され、非常に大きな成果を輸出しています。私の輸出のコードが実行されている間、私は、ユーザーが自分の要求を処理している知っているので、「ロード」アニメーションGIFを表示したいと思います。私は、マルチスレッドでこれをやろうとしてきたが、私はそれに非常に精通していないです。誰もが正しい方向に私を導くことはできますか?ありがとう!

ジョン

役に立ちましたか?

解決

は、サーバー上でマルチスレッドをやろうとしていますか?私がお勧めすると、クライアント側でサーバに投稿する前に、メッセージをお待ちください上のjavascriptの番です。そして、クライアント側で、あなたのメッセージをオフに掲示行われたとき。

あなたの実際のセットアップについての詳細を知らなくても、私はあまりさらに助けることはできませんが、最後の時間は、私はこれらの線に沿って何かをした、これを実装します:

我々が表示され、ウィンドウを引き継ぐためのjQueryを私はdiv要素を設定して使用してPrintLoadingPanelと呼ばれるdiv要素を持っていると仮定します:

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

私は、我々が印刷を行っているかどうかのチェックを開始します1/2秒間隔でタイマーを開始します。私は唯一の生成と小さなPDFのように私は迅速に対応する必要をダウンロードしています。あなたのレポートが本当に遅いされている場合は、これを微調整したい場合があります:

    window.setTimeout(checkIfDoneDownload,500);
私たちは、ファイルを生成し終えて、それをダウンロードした場合、

そして、私のCheckIfDoneDownload機能は、サーバーとのチェックを打ちます。私は、WCFサービスを有効にAJAXを呼び出すためにもう一度ここではjQueryを使用しています。あなたは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を使用する立場にいる場合は、

私は<のhref =「http://www.asp.net/AJAX/Documentation/Live/Tutorials/IntroductionUpdateProgress.aspx」を使用してお勧めします(UpdateProgressと共に)REL = "nofollowをnoreferrer"> UpdatePanel を制御

あなたは素敵なアニメーションGIF画像後にしている場合は、チェックアウト Ajaxloadするます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top