在C#中使用Timer Control以HH:MM:SS格式显示呼叫持续时间

时间:2011-04-11 09:51:15

标签: c# .net winforms

我有一个程序以这种格式显示呼叫的呼叫持续时间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);
    }

2 个答案:

答案 0 :(得分:4)

尝试这种方法。

创建一个变量来保存经过的秒数,然后创建一个计时器。将其间隔设置为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");
}

有关VB.NET版本,请参阅my answerthis question

答案 1 :(得分:1)

而不是创建新的计时器,为什么只重用一个?每次新的通话都可以订阅OnTick并更新通话时间,当您“暂停”时,您可以取消订阅。

如果您有多个电话,那么扩展性会更好。

如果您不担心资源,则将计时器的间隔设置为1秒,将OnTick事件更新呼叫持续时间设置为1秒。

计时器不会在GUI线程上运行,因此您可能必须使用马歇尔(通过InvokeRequired check,SyncContext或Dispatcher)。