定时器.只发生过一次火灾事件,我希望每秒钟都发生一次

本文关键字:一次 每秒钟 我希望 火灾 定时器 事件 | 更新日期: 2023-09-27 18:19:47

Timers.Timer创建StopWatch。我使用Timer.Elapsed来处理在特定时间之后显示时间的事件。我将计时器间隔设为1,并启用为true。我还将"自动重置"设为true。但问题是事件只触发一次。我在文本框中只得到一次时间。如何更改"每秒文本框中的时间"。我尝试了所有选项,但没有成功。。。谢谢

    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中。希望你能理解这一点。

定时器.只发生过一次火灾事件,我希望每秒钟都发生一次

您甚至在设置参数之前就调用了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事件。仅供参考。

在网页中不能这样做。

在呈现页面时,服务器已经完成,客户端已经断开连接。它不会再从你的计时器中获得任何更新。

如果你需要在页面上有一个计时器来显示一些变化的数字,那么你必须通过javascript来完成。

您还需要考虑文本框的内容只能由UI线程更改,而不能由回调上下文更改。你对回拨有异议吗?看看使用调度器在主UI线程而不是定时器线程上调用UI更新。

以下对我有效。我重新安排了一些事情,所以计时器/秒表的设置只设置一次,以避免混淆,还处理了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();
    }