正常StopWatch
不支持初始化偏移時間跨度和TimeSpan
是struct
,因此Elapsed
是不可變的。你可以寫一個包裝圍繞StopWatch
:
public class StopWatchWithOffset
{
private Stopwatch _stopwatch = null;
TimeSpan _offsetTimeSpan;
public StopWatchWithOffset(TimeSpan offsetElapsedTimeSpan)
{
_offsetTimeSpan = offsetElapsedTimeSpan;
_stopwatch = new Stopwatch();
}
public void Start()
{
_stopwatch.Start();
}
public void Stop()
{
_stopwatch.Stop();
}
public TimeSpan ElapsedTimeSpan
{
get
{
return _stopwatch.Elapsed + _offsetTimeSpan;
}
set
{
_offsetTimeSpan = value;
}
}
}
現在你可以添加一個啓動時間跨度:
var offsetTimeStamp = TimeSpan.FromHours(1);
var watch = new StopWatchWithOffset(offsetTimeStamp);
watch.Start();
System.Threading.Thread.Sleep(300);
Console.WriteLine(watch.ElapsedTimeSpan);// 01:00:00.2995983
爲什麼你需要那個?如果您想添加偏移量,然後測量您想要測量的內容,然後將偏移量添加到結果中... –
定時器在'作業''開始'時創建。每10秒鐘,秒錶當前時間被提交給數據庫。當作業暫停時,秒錶停止滴答。如果PC重置IE powercut等,則秒錶從內存中丟失(秒錶列表)。因此,當作業重新啓動時,我需要重新創建每個秒錶,因此從其'jd.ActualTime'恢復時間。 – dynamicuser
爲什麼'TimeSpan total = Stopwatch.Elapsed + offsetTimeStamp;'或類似? – Nolonar