2012-04-02 206 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耗時代碼。

例如,頁面應該加載速度很快,並且long函數應該在等待遊標的線程中繼續加載,當該值被獲取時,它會顯示在標籤或任何其他控件中。

+0

需要多長時間? 5秒鐘或5分鐘? – Aristos 2012-04-02 18:30:22

+0

你應該開始優化數據庫查詢/頁面事件等等。它需要很多內存。 – Pankaj 2012-04-02 18:34:18

+0

@Aristos:加載第一頁需要7-8秒,如果我刪除該功能需要3 - 4秒。 – user175084 2012-04-02 18:44:38

回答

1

有沒有辦法讓服務器發送一些數據後的反應已經與「更新」發送。服務器發送給客戶端的自發性請求將被忽略。

您的客戶將需要的頁面加載後(指JavaScript代碼)請求額外的數據,然後可以用更新的頁面的請求發送到服務器。

,我能想到的最好的方法是使Web服務/網絡方法在表單中的數據,或使一個ICallbackEventHandler(我比較喜歡這些工作),它可以讓你從請求數據一些JavaScript方法。現在,您可以設置這些Web方法來在計算這些數據的時候,或者您可以像您在做的那樣啓動線程並使用會話。這意味着讓其他線程計算數據並將其存儲在加載頁面的會話中,然後讓JavaScript方法獲取會話的值。後一種方法有點脆弱。 (例如,如果他們同時在不同的瀏覽器/選項卡中多次訪問該頁面)。最重要的是,如果會話值尚未填充,則需要阻止該線程(壞主意)或者重複JavaScript輪詢,直到會話值被填充。