从指定时间开始秒表

dyn*_*ser 5 c# time stopwatch winforms

我试图从给定的时间开始秒表(从数据库中提取的十进制值).但是,因为Stopwatch.Elapsed.Add返回一个新的时间跨度而不是修改秒表,我无法找到最好的前进方法.

var offsetTimeStamp = new System.TimeSpan(0,0,0).Add(TimeSpan.FromSeconds((double)jd.ActualTime));
Stopwatch.Elapsed.Add(offsetTimeStamp);
Stopwatch.Start();
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以做到这一点?干杯

Tim*_*ter 5

法线StopWatch不支持偏移时间跨度的初始化,因此是TimeSpana 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以添加一个开始时间跨度:

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
Run Code Online (Sandbox Code Playgroud)

  • 在“ElapsedTimeSpan”的“set”访问器中,不应该是“_offsetTimeSpan = value - _stopwatch.Elapsed”来保持这三个量级之间与“get”访问器相同的关系吗?否则,如果我_设置_属性并在之后立即_获取_它,则它尚未获取我设置的值。 (2认同)