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