2013-06-22 49 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.沒有主循環因此Web服務器端無法實現Timer。 – ElmoVanKielmo

1

爲什麼我不能迭代asp.net中的計時器?

我不知道你是什麼這個意思。從字面上理解,因爲Timer s不代表序列。

但是定時器在1次後不停止,它只是繼續。爲什麼?

因爲這就是Timer的設計目的。它一直在滴答滴答,直到你禁用它。

如何才能達到這種效果?

有什麼影響?只能打勾一次?如果是這樣,請在第一次回發後將其禁用。

停下來想想只是一秒鐘。你手上有timer,也許是你在亞馬遜購買的一些設備。這是instruction manual說,當你啓用它時,它會每十秒響一次。現在你問我們爲什麼在第一響後,它會在十秒後響起。因爲這是它設計的目的。你想知道怎麼沒有那種效果?把它關掉!

+0

請檢查編輯。謝謝! – Omid

+0

您需要向我們提供*最小*和最清晰的工作示例,以展示您描述的行爲,因爲如果實施正確,則不應該如此。 – jason

+0

我做了,查看上面。這是我確切的代碼,但在asp.net不winforms! – Omid

2

讀取行之間的聲音,好像您只希望_ta變量被打印一次(或只要它小於零)。

我懷疑你沒有告訴我們什麼,因爲如果我在一個新的Winforms項目中重現它,你的代碼正常工作。

您可以通過創建一個新的WinForms項目,添加一個按鈕的形式並添加以下代碼來驗證自己這一點:

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; 
    } 
} 

上述程序中,給出了以下的輸出:

enter image description here

+0

是的,它適用於Winforms,但不適用於asp.net。 – Omid

+2

究竟發生了什麼?請記住,網絡是無狀態的,因此信息不會被保留。我從來沒有使用webforms,但我會想,每次你點擊按鈕時,會產生一個新的請求,這意味着'_ta'變量和計時器將被重新初始化。我不會認爲計時器在Web應用程序中會有意義。 –

+0

@Benjamin:他們有。想想嵌入在網頁中的自動更新圖表。 – jason

相關問題