2012-04-02 3 views
1

웹 응용 프로그램에서 많은 시간을 사용하는 기능이 있습니다. 그래서 나는 그것에 대한 스레드를 만들기로 결정했습니다.페이지로드 후 새로 고침 레이블

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"); 
     }    
    } 

이 코드입니다 ..하지만 난 모든 시간이 아약스를 사용하여 코드를 소모를 처리합니다.

예를 들어, 페이지가 빠르게로드되어야하고 값이 얻어 질 때 긴 함수가 대기 커서로 스레드에로드를 계속로드해야합니다. 값이 가져 오면 레이블이나 다른 컨트롤에 표시됩니다.

+0

시간이 얼마나 걸립니까? 5 초 또는 5 분? – Aristos

+0

스레드에 대한 데이터베이스 쿼리/페이지 이벤트 등을 최적화하기 시작해야합니다. 그것은 많은 기억을 필요로합니다. – Pankaj

+0

@Aristos : 첫 페이지를로드하는 데 7-8 초가 걸리며 기능을 제거하는 데 3-4 초가 걸립니다. – user175084

답변

1

응답이 "업데이트"와 함께 전송 된 후에 서버가 일부 데이터를 보낼 수있는 방법이 없습니다. 서버가 클라이언트에 보낸 자발성 요청은 무시됩니다.

클라이언트가 페이지를로드 한 후 (JavaScript 코드) 페이지를 업데이트 할 수있는 추가 데이터를 요청해야합니다.

내가 생각할 수있는 가장 좋은 방법은 양식의 데이터로 웹 서비스/웹 메소드를 작성하거나 데이터를 요청할 수있는 ICallbackEventHandler (오히려 이들과 작업하는 것)을 만드는 것입니다. 일부 JavaScript 메소드. 이제이 시점에서이 웹 메서드를 설정하여 요청시이 데이터를 계산할 수 있습니다. 또는 세션을 수행하는 것처럼 스레드를 회전시킬 수 있습니다. 즉, 다른 스레드가 데이터를 계산하여 페이지로드시 세션에 저장 한 다음 JavaScript 메소드가 세션 밖의 값을 가져 오게하는 것입니다. 후자의 방법은 조금 더 허약합니다. (예를 들어 다른 브라우저/탭에서 페이지가 여러 번 눌린 경우) 세션 값이 아직 채워지지 않은 경우 스레드를 차단해야합니다 (나쁜 아이디어) 또는 세션 값이 채워질 때까지 JavaScript 메소드가 반복적으로 폴링되도록하십시오.