在c#中使用定时器控件以HH:MM:SS格式显示通话时长

本文关键字:格式 SS MM 显示 HH 定时器 控件 | 更新日期: 2023-09-27 17:49:45

我有一个程序,它以这种格式显示呼叫的持续时间HH:MM:SS,用户可以接听另一个呼叫,保持当前呼叫保持。现在,我需要触发另一个计时器重新开始吗?我想使用定时器控制这发生,我怎么能实现这个。?

还有其他最好的方法吗?

最后我设法用下面的代码做。也许它会对别人有用。

    using System.Diagnostics;
    private void MainGUI_Load(object sender, EventArgs e)
    {
        sw.Start();
        timerDuration.Start();
    }
    Stopwatch sw = new Stopwatch();
    private void timerDuration_Tick(object sender, EventArgs e)
    {
        TimeSpan elapsed = sw.Elapsed;
        this.agentView.Rows[0].Cells[4].Value = String.Format("{00:00}:{1:00}:{2:00}", Math.Floor(elapsed.TotalHours), elapsed.Minutes, elapsed.Seconds);
    }

在c#中使用定时器控件以HH:MM:SS格式显示通话时长

试试这个方法。

创建一个变量来保存经过的秒数,然后创建一个计时器。将其间隔设置为1000,并订阅其Tick事件。
在tick事件中,根据需要增加或减少时间变量,并调用此方法将时间格式化为HH:MM:SS

public string GetTime(int Time)
{
    int Hrs = 0;    //number of hours
    int Min = 0;    //number of Minutes
    int Sec = 0;    //number of Sec
    //Seconds
    Sec = Time % 60;
    //Minutes
    Min = ((Time - Sec) / 60) % 60;
    //Hours
    Hrs = ((Time - (Sec + (Min * 60))) / 3600) % 60;
    return Strings.Format(Hrs, "00") + ":" + 
           Strings.Format(Min, "00") + ":" +
           Strings.Format(Sec, "00");
}

参见我对这个问题的回答。净版。

与其创建新的计时器,为什么只重用一个呢?每次新的通话,你都可以订阅OnTick并更新通话时长,当你处于"等待"状态时,你可以取消订阅。

如果您有多个呼叫,则可以更好地缩放。

如果你不担心资源,那么设置定时器的间隔为1秒,OnTick事件更新调用持续时间为1秒。

定时器不运行在GUI线程,所以你可能不得不使用marshall它回来(通过invokerrequiredcheck, SyncContext或Dispatcher)。