2012-04-02 10 views
1

私は、Webアプリケーションで多くの時間を費やしている機能を持っています。 私はそれのためのスレッドを作成することにしました。ページ・ロード後のリフレッシュ・ラベル

Thread t = new Thread(getEventErrors); 
      t.Start(); 

この関数は値を計算し、ラベルに適用します。

これは問題です。asp.netではページが一度読み込まれ、それまでラベルは更新されていないためです。

これをAJAXを使用して実装するにはどうすればよいですか?

ページが読み込まれる方法はありますか?値が計算された後、ラベルが更新されますか?

いずれのサンプルコードも高く評価されます。

おかげ

private void getEventErrors() 
    {   
     EventLog eventLog = new EventLog("Application", "."); 

     getEvents(eventLog.Entries); 
    } 

private void getEvents(EventLogEntryCollection eventLogEntryCollection) 
    { 
     int errorEvents = 0; 

     foreach (EventLogEntry logEntry in eventLogEntryCollection) 
     { 
      if (logEntry.Source.Equals("Application Name")) 
      { 
       DateTime variable = Convert.ToDateTime(logEntry.TimeWritten); 
       long eventTimeTicks = (variable.Ticks); 
       long eventTimeUTC = (eventTimeTicks - 621355968000000000)/10000000; 

       long presentDayTicks = DateTime.Now.Ticks; 
       long daysBackSeconds = ((presentDayTicks - 864000000000) - 621355968000000000)/10000000; 


       if (eventTimeUTC > daysBackSeconds) 
       { 
        if (logEntry.EntryType.ToString() == "Error") 
        { 
         errorEvents = errorEvents + 1; 
        }       
       } 
      } 
     } 
     btn_Link_Event_Errors_Val.Text = errorEvents.ToString(GUIUtility.TWO_DECIMAL_PT_FORMAT);    
     if (errorEvents == 0) 
     { 
      lbl_EventErrorColor.Attributes.Clear(); 
      lbl_EventErrorColor.Attributes.Add("class", "green"); 
     } 
     else 
     { 
      lbl_EventErrorColor.Attributes.Clear(); 
      lbl_EventErrorColor.Attributes.Add("class", "red"); 
     }    
    } 

が、これはコードです..しかし、私はすべての長い時間AJAXを使用してコードを消費を処理します。

例えば、ページが高速に読み込まれ、長い関数は、値が取得されたときに待機カーソルをスレッドにロードし続ける必要があります。

+0

時間はどれくらいですか? 5秒または5分? – Aristos

+0

スレッドの実行に備えて、データベースのクエリ/ページイベントなどの最適化を開始する必要があります。それは多くの記憶を必要とする。 – Pankaj

+0

@Aristos:最初のページを読み込むのに7-8秒かかります。機能を削除するには3 - 4秒かかります。 – user175084

答えて

1

「更新」を含む応答が送信された後、サーバーがデータを送信する方法はありません。サーバーからクライアントに送信される自発性要求は無視されます。

クライアントは、ページを読み込んだ後に(JavaScriptコードを意味する)サーバーにリクエストを送信して、ページを更新できる追加データをリクエストする必要があります。

私が考えることができる最もよい方法は、フォーム内のデータを使ってWebサービス/ Webメソッドを作成すること、またはICallbackEventHandler(これはむしろこれらの作業に似ています)を使用して、いくつかのJavaScriptメソッド。この時点で、これらのWebメソッドを設定して、このデータの一部を計算するように設定するか、実行中のようにスレッドをスピンアップしてセッションを使用することができます。これは、他のスレッドがデータを計算してページロード時にセッションに格納し、JavaScriptメソッドにセッションの値を取得させることを意味します。後者の方法はやや脆弱です。 (たとえば、複数のブラウザ/タブで同時に複数のページにヒットした場合など)セッションの値がまだ入力されていない場合は、スレッドをブロックする必要があります(悪い考え方)セッションの値が入力されるまで、JavaScriptメソッドを繰り返しポーリングすることができます。

関連する問題