2012-12-21 103 views
0

我有一個asp.net應用程序應該像秒錶計時器。我已經嘗試過如何讓定時器使用秒來計算時間的變體。我使用了一種效率很低的算法。然後,我嘗試使用日期時間數學的時間跨度對象,但由於這基本上製作了一個時鐘,這是不受歡迎的。現在我試圖實現System.Diagnostics,以便我可以使用Stopwatch對象。當我運行我的程序時,應該隨時間更新的標籤顯示全部爲0。如何創建秒錶計時器

這與定時器和更新面板在.aspx頁面的代碼:

 <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
        <ContentTemplate> 
         <asp:Timer ID="Timer1" runat="server" Enabled="false" 
          Interval="1000" OnTick="Timer1_Tick"></asp:Timer> 
         <asp:Label ID="Label1" runat="server"></asp:Label> 
        </ContentTemplate> 
       </asp:UpdatePanel> 

這是啓動秒錶和定時器我啓動按鈕事件:

 protected void Start_Click(object sender, EventArgs e) 
    { 
     //Start the timer 
     Timer1.Enabled = true; 
     stopWatch.Start(); 
    } 

這是TIMER1事件(currentTime的是一個時間跨度對象):

 protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     currentTime = stopWatch.Elapsed; 
     Label1.Text = String.Format("{0:00}:{1:00}:{2:00}", 
     currentTime.Hours.ToString(), currentTime.Minutes.ToString(), 
     currentTime.Seconds.ToString()); 

我誠實d不知道我做錯了什麼。我認爲這將是製作秒錶計時器的最簡單方法,但標籤內沒有任何變化。我將不勝感激任何幫助。如有必要,我會提供更多信息。

+0

看看[這個答案](http://stackoverflow.com/questions/2336958/should-i-use-ajax-timer?rq = 1)對您有好處 – Steve

+1

ASP.Net代碼在服務器上運行,您試圖查看瀏覽器中的更改 - 因此正如預期的那樣,您將獲得靜態0。史蒂夫的鏈接(客戶端定時器)是你需要的 - 否則請評論你想達到的目標。 –

+0

我只是想做一個秒錶計時器,我希望我可以使用CodeBehind文件來做到這一點,但我想我被迫使用JavaScript來做到這一點。 – user1910256

回答

1

請嘗試下面的代碼。這個對我有用。

添加下面的代碼在websource代碼:

<asp:scriptmanager ID="Scriptmanager1" runat="server"></asp:scriptmanager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
    <asp:Label ID="Label1" runat="server" Font-Size="XX-Large"></asp:Label> 
    <asp:Timer ID="tm1" Interval="1000" runat="server" ontick="tm1_Tick" /> 
    </ContentTemplate> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="tm1" EventName="Tick" /> 
    </Triggers> 
</asp:UpdatePanel> 

添加下面的源代碼在你的CS文件:

using System.Diagnostics; 

public partial class ExamPaper : System.Web.UI.Page 
{ 
    public static Stopwatch sw; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      sw = new Stopwatch(); 
      sw.Start(); 
     } 
    } 

    protected void tm1_Tick(object sender, EventArgs e) 
    { 
     long sec = sw.Elapsed.Seconds; 
     long min = sw.Elapsed.Minutes; 

     if (min < 60) 
     { 
      if (min < 10) 
       Label1.Text = "0" + min; 
      else 
       Label1.Text = min.ToString(); 

      Label1.Text += " : "; 

      if (sec < 10) 
       Label1.Text += "0" + sec; 
      else 
       Label1.Text += sec.ToString(); 
     } 
     else 
     { 
      sw.Stop(); 
      Response.Redirect("Timeout.aspx"); 
     } 
    } 
}