我有一个程序以这种格式显示呼叫的呼叫持续时间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);
}
答案 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 answer至this question。
答案 1 :(得分:1)
而不是创建新的计时器,为什么只重用一个?每次新的通话都可以订阅OnTick并更新通话时间,当您“暂停”时,您可以取消订阅。
如果您有多个电话,那么扩展性会更好。
如果您不担心资源,则将计时器的间隔设置为1秒,将OnTick事件更新呼叫持续时间设置为1秒。
计时器不会在GUI线程上运行,因此您可能必须使用马歇尔(通过InvokeRequired check,SyncContext或Dispatcher)。