我有一个程序,它以这种格式显示呼叫的持续时间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);
}
试试这个方法。
创建一个变量来保存经过的秒数,然后创建一个计时器。将其间隔设置为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)。