2012-04-02 156 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轮询,直到会话值被填充。