2012-03-03 45 views
3

ページが最初に呼び出されたときに、ページが読み込まれるのを待っている間に「お待ちください」というメッセージを表示したいと思います。ただし、下の例では、someLongProcessが完了するまでページがレンダリングされません。ASP.NETでの長時間の操作中に「しばらくお待ちください」というメッセージを表示するにはどうすればよいですか?

私はAJAXのようなものを使用して初期の「お待ちください」メッセージを表示してから最初の処理を開始する必要があると思われます。助言がありますか?

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     Call SetupGUI() 'user doesnt see this setup until page is rendered. 
     Call someLongProcess() 
    End If 
End Sub 

答えて

3

この要件のために非同期ページを作成する場合は、どうしたらよいでしょうか。プロセスは非常にうまく説明されているここに素敵な記事http://msdn.microsoft.com/en-us/magazine/cc163725.aspxがあります。それは古い記事なので、それを価値あるものにしてください。また、PageAsyncTaskクラスhttp://msdn.microsoft.com/en-us/library/system.web.ui.pageasynctask.aspxを見てください。

上記のリンクは正しい方向に進むはずです。

3

あなたは、私が説明する前に、コードのこの作品を書いたとき、どのようにあなたのタスク

を達成することができますアプローチを私はいただきました!間違って記述することから始めましょうあなたは、クライアントとサーバーが何らかの形で接続されていることを前提としていました。残念ながらそうではありません。 HTTPはステートレスプロトコルです。ステートレスなプロトコルは何を意味しているのでしょうか?

サーバーがJamesであり、彼に電話番号がない電話回線があるとします。彼は質問をする異なるクライアントから毎日千の電話を受ける。今やジェームズは非常に知識があり、すぐにそれらの質問に答えることができますが、クライアントから値引きを受けると、コールバックできません(発信者IDがないことを覚えていません。

質問は短いですが、答えを考えなければならない質問がある場合は、ジェームスが考えている間に待つか、ジェームスがあなたに電話して欲しい。

電話を待つためには、webconfigのASP.Net executionTimeOut値を増やす必要があります。デフォルト値は110秒であり、あなたが答えを待っている間、あなただけのボタン/リンクをクリックしたときに、関数を呼び出すHidePreloader

<div id="preloader" style="width: 100%; text-align: center;"> 
        <img src="../Images/loading.gif" alt="" style="display: block;" /> 
       </div> 

<script language="javascript" type="text/javascript"> 
    function HidePreloader() { 
     if (document.getElementById('preloader') != null) { 
      document.getElementById('preloader').style.visibility = 'hidden'; 

     } 
    } 
</script> 

下のコードを使用して、スピナーのロード/進行状況を表示することができます。

これはすべてのおしゃれなドリーですが、ジェームスは古い人で、彼は同時に10の通話しか聞くことができないことを覚えています。 10人が既にジェームズに連れて行っているなら、彼は11回目のコールに答えることはできません。これは良いことではありません。私たちが望むのは、ジェームズが私たちに電話をかける方法です。私たちはJamesに発信者IDを与えたい。悲しいことに、発信者番号はWindows 8サーバーまで、そしてwebsocketsをサポートしているクライアント(ブラウザ)にのみ提供されます。

それでは、どうしたらこの問題を解決できますか?ああ、私たちがジェームズに名前をつけて教えれば、答えを見つけたかどうかを5分後に尋ねます。これはポーリングと呼ばれます。基本的には、サーバーに長期実行タスクを完了するように依頼し、サーバーはトークンを与えます。数分または数秒ごとに、あなたはサーバーに尋ねます。これは私のトークンです。私の仕事は完了しています。タスクが完了したら、ページに新しいデータを入力します。これは、従来、JavascriptとWebサービスを使用して実現されています。また、このフレームワークSignalIRを見て、このようなことを達成する方法を提供することもできます。

このメンタルモデルは、HTTPのステートレスな性質をよりよく理解するのに役立ちます。

関連する問題