Timers.Timer创建StopWatch。我使用Timer.Elapsed来处理在特定时间之后显示时间的事件。我将定时器间隔设为1并启用为真。我也将AutoReset设为true。但问题是事件只发射一次。我只在文本框中得到一次时间。我怎样才能在TextBox中每时候更改时间。我尝试所有替代方案但没有获得成功...谢谢
System.Timers.Timer StopWatchTimer = new System.Timers.Timer();
Stopwatch sw = new Stopwatch();
public void StopwatchStartBtn_Click(object sender, ImageClickEventArgs e)
{
StopWatchTimer.Start();
StopWatchTimer.Interval = 1;
StopWatchTimer.Enabled = true;
StopWatchTimer.AutoReset =true;
sw.Start();
StopWatchTimer.Elapsed += new System.Timers.ElapsedEventHandler(StopWatchTimer_Tick);
}
protected void StopWatchStopBtn_Click(object sender, ImageClickEventArgs e)
{
TextBoxStopWatch.Text = "00:00:000";
StopWatchTimer.Stop();
sw.Reset();
sw.Stop();
}
public void StopWatchTimer_Tick(object sender,EventArgs e)
{
TextBoxStopWatch.Text= Convert.ToString(sw.Elapsed);
}
更新 我通过在Visual Studio中创建新网站来尝试它。但仍然没有得到成功。问题。现在更新是我在行中设置断点
TextBoxStopWatch.Text= Convert.ToString(sw.Elapsed);
文本在那里不断更改但不在TextBox中显示。希望你能理解这一点。
答案 0 :(得分:5)
在设置参数之前,您正在调用Start()
。试试这个:
StopWatchTimer.Interval = 1000;
StopWatchTimer.AutoReset = true;
StopWatchTimer.Elapsed += new System.Timers.ElapsedEventHandler(StopWatchTimer_Tick);
StopWatchTimer.Enabled = true;
设置完所有属性后,将Enabled
属性设置为true
。 (调用Start()
方法相当于设置Enabled = true
)
另外,不确定您是否知道这一点,但Timer.Interval
属性以毫秒为单位。所以你每毫秒发射一次Timer.Elapsed
事件。只是一个FYI。
答案 1 :(得分:3)
你不能在网页上这样做。
在呈现页面时,服务器已完成,客户端已断开连接。它不会从您的计时器获得更多更新。
如果您需要在页面上显示一个计时器,显示一些不断变化的数字,那么您将不得不通过javascript执行此操作。
答案 2 :(得分:1)
您还需要考虑到文本框的内容只能由UI线程而不是回调上下文更改。你是否对回调采取了例外? 查看使用调度程序在主UI线程而不是计时器线程上调用UI更新。
答案 3 :(得分:0)
以下适用于我。我重新安排了一些东西,所以定时器/秒表的设置只设置一次,以避免混淆,并处理UI线程调用。
System.Timers.Timer timer;
Stopwatch stopwatch;
public Form1()
{
InitializeComponent();
timer = new System.Timers.Timer();
timer.Interval = 1000;
timer.AutoReset = true;
timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
stopwatch = new Stopwatch();
}
public void TimerElapsed(object sender, EventArgs e)
{
TextBoxStopWatch.Text = Convert.ToString(stopwatch.Elapsed);
}
private void btnStart_Click(object sender, EventArgs e)
{
timer.Start();
stopwatch.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
TextBoxStopWatch.Text = "00:00:000";
timer.Stop();
stopwatch.Reset();
stopwatch.Stop();
}