6

特定の時間 (データベースから取得した 10 進数値) からストップウォッチを開始しようとしています。ただし、は を変更するのではなくStopwatch.Elapsed.Add、新しい を返すため、最適な方法を見つけることができません。TimespanStopwatch

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

どうすればこれを行うことができますか?乾杯

4

5 に答える 5

7

法線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;
        }
    }
}

start-timespan を追加できるようになりました。

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
于 2013-07-16T09:36:00.263 に答える
0

ElapsedプロパティStopWatchは読み取り専用です。これは理にかなっています。ストップウォッチは、スタートからストップまでの時間を計測するだけです。

値にタイムスパンを追加したい場合 -Elapsed変数で値を取得し、それを測定した後 (つまり停止後) にタイムスパンを追加します。

于 2013-07-16T09:29:17.570 に答える
0

このファイルをプロジェクトに追加する場合、プロジェクトで変更する必要があるものは何もありません。このクラスは元のクラスを継承しStopwatch、同じ名前と同じメソッド/プロパティを持ちますが、追加機能があります。

  • SetOffset()方法
  • オフセットによる初期化

.

using System;

public class Stopwatch : System.Diagnostics.Stopwatch
{
    TimeSpan _offset = new TimeSpan();

    public Stopwatch()
    {
    }

    public Stopwatch(TimeSpan offset)
    {
        _offset = offset;
    }

    public void SetOffset(TimeSpan offsetElapsedTimeSpan)
    {
        _offset = offsetElapsedTimeSpan;
    }

    public TimeSpan Elapsed
    {
        get{ return base.Elapsed + _offset; }
        set{ _offset = value; }
    }

    public long ElapsedMilliseconds
    {
        get { return base.ElapsedMilliseconds + _offset.Milliseconds; }
    }

    public long ElapsedTicks
    {
        get { return base.ElapsedTicks + _offset.Ticks; }
    }

}
于 2017-02-26T08:59:01.923 に答える