Я пишу небольшой модуль для сайта DNN. Мне нужно обновить <div>
каждые n секунд с содержимым списка из кода, одним элементом списка за раз. Я установил <asp:UpdatePanel>
на веб-странице вместе с 5 секундой <asp:Timer>
. В моем OnTick()
я поставил глобальную переменную flag
1. Тогда я занят ожидание в цикле в то время, и каждый раз flag
изменяется от 0 до 1, я обновления содержимого <div>
«s:Занятое ожидание в кодебе - dotnetnuke
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. Мой таймер настроен правильно, так как обновляется <div>
, если я избавлюсь от циклов while и просто обновляю его с помощью DateTime.Now
.
У вас есть бесконечный цикл. Ничто не собирается обновлять ваш флаг. Каждая обратная передача, независимо от того, является ли она асинхронной обратной связью или нет, приведет к новому созданию вашего класса страницы, и, следовательно, ваша переменная флага не будет в правильном экземпляре для обновления. – mason
На самом деле у вас есть два бесконечных цикла. 'while (true)' никогда не будет разбит сам по себе, вы должны явно называть 'break;' – mason
Мне не нужно вырываться из 'while (true)', потому что мне нужно перебирать список в качестве пока страница открыта. – user3505003