2013-06-22 3 views
-2

이 내 코드입니다 :asp.net에서 타이머를 반복 할 수없는 이유는 무엇입니까?

protected void Button1_Click(object sender, EventArgs e) 
     { 

      Timer1.Enabled = true; 
     } 

int _ta = 0; 
protected void Timer1_Tick(object sender, EventArgs e) 
     { 
      if (_ta < 1) 
      { 
       _ta++; 
       System.Diagnostics.Debug.WriteLine(_ta); 

      } 

그러나 WriteLine(_ta); 1 시간 후 중지하지 않습니다, 그냥 continutes. 왜? 이 효과를 어떻게 얻을 수 있습니까?

편집 :

임 미안, 나는하지 않았다 충분히 명확 :

내가 의미 :

System.Diagnostics.Debug.WriteLine(_ta); 

이 여전히 발생, _ta 더 큰 다음 0

경우에도
+0

질문은 무엇입니까? 나는 혼란스러워. –

+1

카운터를 늘리면 타이머가 멈출 것이라고 생각하는 이유는 무엇입니까? –

+2

그게 무슨 뜻일까요? 타이머는 컬렉션이 아닙니다. 어떻게 반복할까요? – Oded

답변

3

답변 및 의견과 함께 질문을 읽었습니다. 나는 당신이 한 가지를 이해하지 못하는 것을 보았습니다 : The variable '_ta' will be reinitialized with 0 on every request 그리고 그 이유는 항상 '1'이 계속 인쇄되는 것을 보았습니다.

Timer를 비표준 방식으로 사용해야하는 몇 가지 이유가 있지만 중요하지 않습니다.

어떤 변수가 동일한 사용자의 후속 요청간에 유지하려는 경우, 당신은 변수 저장 session을 사용해야합니다 - 모두 여기에 설명되어 있습니다 : http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.100%29.aspx

+0

그래서 타이머가 똑딱 거리면서 새로운 요청이 있습니까? – Omid

+0

정확히. 타이머는 브라우저의 페이지에서 틱합니다. 모든 틱에서 페이지가 AJAX 요청을 서버에 보내면 처리기가 서버에서 실행되고 응답이 브라우저로 다시 전송됩니다. 1. 처리기가 서버 측 코드 인 경우 2. 서버가 요청에 응답하는 것 이외의 방식으로 클라이언트 (브라우저)에 데이터를 보낼 수없는 경우 3. 서버에 기본 루프가 없습니다. 따라서 웹 서버 측에서 Timer를 구현할 방법이 없습니다. – ElmoVanKielmo

1

왜 asp.net에서 타이머를 반복 할 수 없습니까?

나는 무엇을 이 무슨 뜻인지 모르겠다. 문자 그대로 받아 들여진 이유는 Timer이 시퀀스를 나타내지 않기 때문입니다.

타이머는 1 시간 후에 멈추지 않고 그대로 계속됩니다. 왜?

Timer이 그렇게 설계 되었기 때문입니다. 당신이 그것을 무능력하게 할 때까지 계속 똑딱 거리고있다.

어떻게이 효과를 얻을 수 있습니까?

어떤 효과가 있습니까? 한 번만 틱하는거야? 그렇다면 첫 번째 포스트 백 후에 비활성화하십시오.

중지하고 생각하십시오 그냥 초. 아마 timer을 가지고있을 것입니다. 아마존에서 구입 한 기기 일 수도 있습니다. 그것은 instruction manual입니다. 활성화하면 10 초마다 울릴 것입니다. 이제 우리는 첫 번째 반지 다음에 10 초 후에 다시 울리는 이유를 묻고 있습니다. 그것이 그것이하기 위해서 설계된 것이기 때문입니다. 그리고 그 효과를 얻지 못하는 법을 알고 싶습니까? 꺼 버려!

+0

편집을 확인하십시오. 감사! – Omid

+0

올바르게 구현 된 경우가 아니기 때문에 설명하는 동작을 나타내는 가장 작고 분명한 예제를 제공해야합니다. – jason

+0

나는 확인했다. 내 정확한 코드이지만 asp.net winforms하지! – Omid

2

_ta 변수를 한 번만 인쇄하려는 경우 (또는 0보다 작 으면) 선 사이를 읽으면됩니다.

새로운 Winforms 프로젝트에서 코드를 재현하면 코드가 올바르게 작동하기 때문에 뭔가를 말하지 않는 것으로 판단됩니다.

다음과 같은 코드, 새로운 윈폼 프로젝트를 만들고 폼에 버튼을 추가하고 추가하여 자신이 확인할 수 있습니다

:

enter image description here

:

public partial class Form1 : Form 
{ 
    private Timer timer = new Timer(); 
    int _ta = 0; 

    public Form1() 
    { 
     InitializeComponent(); 
     timer.Tick += timer_Tick; 
    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     if (_ta < 1) 
     { 
      _ta++; 
      System.Diagnostics.Debug.WriteLine("This should only be called once..."); 
      System.Diagnostics.Debug.WriteLine(_ta); 
     } 

     System.Diagnostics.Debug.WriteLine("This should be called every tick..."); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     timer.Enabled = true; 
    } 
} 

위의 프로그램은 다음과 같은 출력을 제공을

+0

예 그것은 Winforms에서 작동하지만 asp.net에서는 작동하지 않습니다. – Omid

+2

실제로 무엇이 일어나고 있습니까? 웹은 무국적이므로 정보가 유지되지 않습니다. 나는 결코 웹 폼을 사용하지 못했지만, 버튼을 클릭 할 때마다 새로운 요청이 만들어 질 것이라고 생각했을 것이다. 이것은 '_ta' 변수와 타이머가 다시 초기화된다는 것을 의미한다. 타이머가 웹 응용 프로그램에서 의미가 있다고 생각하지 않았을 것입니다. –

+0

@ 벤자민 : 그렇습니다. 웹 페이지에 삽입 된 자동 업데이트 차트에 대해 생각해보십시오. – jason

관련 문제