页面加载后刷新标签

时间:2012-04-02 18:11:32

标签: c# asp.net ajax multithreading

我有一个在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函数应该使用等待光标继续加载到线程中,当获得值时,它会显示在标签或任何其他控件中。

1 个答案:

答案 0 :(得分:1)

在使用“更新”发送响应后,服务器无法发送一些数据。服务器发送给客户端的自发性请求将被忽略。

您的客户端需要在加载页面后(意味着JavaScript代码)向服务器发送请求,以请求您可以随后更新页面的其他数据。

我能想到的最好的方法是使用表单中的数据制作一个Web服务/ Web方法,或者制作一个ICallbackEventHandler(我更喜欢使用这些方法),它允许您请求一些JavaScript方法的数据。现在,此时您可以设置这些Web方法以在被询问时计算这段数据,或者您可以像正在进行的那样启动线程并使用会话。这意味着让另一个线程计算数据并将其存储在页面加载的会话中,然后使JavaScript方法获得会话之外的值。后一种方法有点脆弱。 (例如,如果他们同时在不同的浏览器/标签中多次点击该页面。)最重要的是,如果尚未填充会话值,您将需要阻止该线程(不好主意)或重复进行JavaScript方法轮询,直到填充会话值。