Asp.Net中的秒表计时器

时间:2012-02-10 06:50:34

标签: asp.net

我想使用Asp.Net C#...

来显示秒表计时器

我在谷歌中搜索了很多线程并进行了搜索... 但无法找到合适的代码或解决方案.. 我发现的大多数解决方案都很难实现,有些解决方案没有用......

我想创建一个类似于图像的秒表..

enter image description here

在此通过单击开始按钮从00.00启动手表并且格式为HH.MM。

并将Button的文本更改为Stop。 然后点击它再停止手表.. 然后将该时间保存在数据库中,并在给定的TextBox中显示.... 点击重置,它将时间重置为00.00 ..

我该怎么办?

我对此没有任何想法......因此需要一些代码......

好以下是我在网站上试过的代码和图片......

enter image description here

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Diagnostics;





public partial class Default5 : System.Web.UI.Page
{
    private Stopwatch sw = new Stopwatch();
        protected void Page_Load(object sender, EventArgs e)
        {


        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            if (Button3.Text == "start")
            {
                Timer1.Enabled = true;
                sw.Start();
                Button3.Text = "stop";

            }
            else
            {
                Timer1.Enabled = false;
                sw.Stop();
                Button3.Text = "start";

                //TextBox1.Text = Label1.Text;
            }

        }
        protected void Timer1_Tick(object sender, EventArgs e)
        {

            int hrs = sw.Elapsed.Hours;
            //int hrs = "1;
            int mins = sw.Elapsed.Minutes;
            int secs = sw.Elapsed.Seconds;

            Label1.Text = hrs + ":";

            if (mins < 10)
               Label1.Text += "0" + mins + ":";
            else
                Label1.Text += mins + ":";

            if (secs < 10)
                Label1.Text += "0" + secs;
            else
                Label1.Text += secs;



        }

}

和项目中的代码(工作正常)是......

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private Stopwatch sw = new Stopwatch();

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Start")
            {
                timer1.Enabled = true;
                sw.Start();
                button1.Text = "Stop";

            }
            else
            {
                timer1.Enabled = false;
                sw.Stop();
                button1.Text = "Start";
                textBox1.Text = label1.Text;
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int hrs = sw.Elapsed.Hours, mins = sw.Elapsed.Minutes, secs = sw.Elapsed.Seconds;

            label1.Text = hrs + ":";

            if(mins <10)
                label1.Text += "0"  + mins + ":";
            else 
                label1.Text += mins + ":";

            if (secs < 10)
                label1.Text += "0" + secs;
            else
                label1.Text += secs;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }


    }
}

在两个定时器间隔都设置为1000

在网站上,时间不会增加。它仍然是0:00:00 ......

3 个答案:

答案 0 :(得分:2)

尝试以下代码。它对我有用。

在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");
        }
    }
} 

答案 1 :(得分:1)

桌面和Web应用程序的开发存在很大差异。

在您的WinForm应用中,该应用在一台电脑上运行,在一个过程中。后面的代码可以持续访问用户界面,并可以更新当前时间。

Web application中,一切都不同。网络本质上是一个断开连接的无状态环境。这意味着服务器从世界某个地方的浏览器获取请求,创建响应并将其发送回浏览器并忘记它。

这意味着浏览器中显示的用户界面与您服务器上运行的代码之间没有永久连接。这就是您的代码无效的原因。

ASP.NET WebForms具有帮助您解决Web开发所固有的问题的功能,您可以相信存在一些永久连接。

我建议,为了更好地了解工作原理,从后面的代码中删除计时器并添加一个按钮,单击该按钮将更改标签文本。

要真正创建秒表,您需要在用户的浏览器中运行代码,而不是在服务器上运行。在浏览器中运行的代码知道环境和用户界面,并且可以相应地更新内容。这是通过一种名为JavaScript的不同编程语言完成的。

我建议从教程here开始。

答案 2 :(得分:0)

您似乎在单层有状态桌面应用程序和双层无状态Web应用程序之间完全混淆。你不能只在服务器上运行代码,这些代码会神奇地更新,就像没有很多复杂的ajax和jquery技巧的windows窗体一样。请阅读有关HTTP,Web服务器和Web浏览器实际工作方式的更多信息。