我有一个asp.net应用程序,应该像秒表计时器。我尝试过如何让计时器使用秒来计算时间。我使用的算法效率很低。然后我尝试使用datetime数学使用timepan对象,但由于这基本上是一个时钟,它是不可取的。现在我正在尝试实现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());
老实说,我不知道自己做错了什么。我认为这是制作秒表计时器的最简单方法,但标签内没有任何变化。我将不胜感激任何帮助。如有必要,我会提供更多信息。
答案 0 :(得分: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");
}
}
}