2017-01-20 7 views
0

Я пишу небольшой модуль для сайта 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.

+0

У вас есть бесконечный цикл. Ничто не собирается обновлять ваш флаг. Каждая обратная передача, независимо от того, является ли она асинхронной обратной связью или нет, приведет к новому созданию вашего класса страницы, и, следовательно, ваша переменная флага не будет в правильном экземпляре для обновления. – mason

+0

На самом деле у вас есть два бесконечных цикла. 'while (true)' никогда не будет разбит сам по себе, вы должны явно называть 'break;' – mason

+0

Мне не нужно вырываться из 'while (true)', потому что мне нужно перебирать список в качестве пока страница открыта. – user3505003

ответ

0

Хорошо, я просто прочитал, что серверная сторона в ASP.net не имеет гражданства, поэтому flag в моем OnTick, а другой метод - из отдельных экземпляров класса. Я закончил хранение своих данных в куки, а затем использовал их для периодического обновления div.