2017-01-20 3 views
0

DNN 웹 사이트 용 소형 모듈을 쓰고 있습니다. 한 번에 하나의 목록 항목, codebehind에서 목록의 내용으로 <div>을 n 초마다 업데이트해야합니다. 웹 페이지에 <asp:UpdatePanel>을 5 초 <asp:Timer>과 함께 설정했습니다. 페이지가 걸려 끝Codebehind에서 바쁜 대기 중 - 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; 
       } 
      } 

: 내 OnTick()에서 나는 그럼 난 바쁜 while 루프에서 대기하고 0에서 1로 매번 flag 변경, 나는 <div>의 내용을 업데이트 1. 전역 변수 flag 설정 결국 DNN은 시간 초과 오류를 발생시킵니다. 전역 변수 flag을 사용하는 것이 왜 작동하지 않는지 이해하려고합니다. 많이 고마워.

P. while 루프를 제거하고 DateTime.Now으로 업데이트하면 <div>이 업데이트되면서 타이머가 올바르게 설정됩니다.

+0

무한 루프가 있습니다. 국기를 업데이트 할 방법이 없습니다. 비동기 포스트 백 여부와 상관없이 각 포스트 백이 페이지 클래스를 새로 작성하므로 플래그 변수가 올바른 인스턴스에 업데이트되지 않습니다. – mason

+0

실제로 두 개의 무한 루프가 있습니다. 'while (true)'는 절대로 깨지지 않을 것이고, 명시 적으로'break; '를 호출해야만한다. – mason

+0

'while (true)'에서 빠져 나올 필요가 없다. 오래 동안 페이지가 열려 있습니다. – user3505003

답변

0

좋아요. ASP.net의 서버 측은 상태가 저장되지 않으므로 flag이 내 OnTick에 있고 다른 방법은 클래스의 개별 인스턴스에서 가져온 것입니다. 쿠키에 데이터를 저장 한 다음 해당 쿠키를 사용하여 div를 정기적으로 업데이트했습니다.