忙于等待代码隐藏 - dotnetnuke
Busy waiting in codebehind - dotnetnuke
我正在为 DNN 网站编写一个小模块。我需要每 n 秒更新一次 <div>
,使用代码隐藏中的列表内容,一次一个列表项。我在网页上设置了一个 <asp:UpdatePanel>
以及一个 5 秒 <asp:Timer>
。在我的 OnTick()
中,我将一个全局变量 flag
设置为 1。然后我在 while 循环中忙着等待,每次 flag
从 0 变为 1,我更新 <div>
的内容:
List<String> dcList1 = new List<string>();
for (int i = 0; i < 10; i++)
dcList1.Add(i.ToString());
while (true)
{
for (int i = 0; i < dcList1.Count; i++)
{
//busy wait
while (flag == 0)
{
;
}
mainDiv.InnerHtml = dcList1[i].ToString();
//reset flag
flag = 0;
}
}
页面挂起一段时间,最终 DNN 抛出超时错误。我试图理解为什么使用这样的全局变量 flag
不起作用。非常感谢。
P.S。我的计时器设置正确,因为如果我摆脱 while 循环并用 DateTime.Now
.
更新它,<div>
就会更新
好的,我刚刚读到 ASP.net 中的服务器端是无状态的,所以 OnTick
中的 flag
和其他方法来自 class 的单独实例。我最终将数据存储在 cookie 中,然后使用它们定期更新 div.
我正在为 DNN 网站编写一个小模块。我需要每 n 秒更新一次 <div>
,使用代码隐藏中的列表内容,一次一个列表项。我在网页上设置了一个 <asp:UpdatePanel>
以及一个 5 秒 <asp:Timer>
。在我的 OnTick()
中,我将一个全局变量 flag
设置为 1。然后我在 while 循环中忙着等待,每次 flag
从 0 变为 1,我更新 <div>
的内容:
List<String> dcList1 = new List<string>();
for (int i = 0; i < 10; i++)
dcList1.Add(i.ToString());
while (true)
{
for (int i = 0; i < dcList1.Count; i++)
{
//busy wait
while (flag == 0)
{
;
}
mainDiv.InnerHtml = dcList1[i].ToString();
//reset flag
flag = 0;
}
}
页面挂起一段时间,最终 DNN 抛出超时错误。我试图理解为什么使用这样的全局变量 flag
不起作用。非常感谢。
P.S。我的计时器设置正确,因为如果我摆脱 while 循环并用 DateTime.Now
.
<div>
就会更新
好的,我刚刚读到 ASP.net 中的服务器端是无状态的,所以 OnTick
中的 flag
和其他方法来自 class 的单独实例。我最终将数据存储在 cookie 中,然后使用它们定期更新 div.