C# 一种获取自上次方法调用以来实时传递的毫秒数的方法

C# 一种获取自上次方法调用以来实时传递的毫秒数的方法,c#,wpf,timing,C#,Wpf,Timing,我正在调用一个更新函数来绘制一个实时模拟,我想知道是否有一种有效的方法来获取自上次更新以来经过的毫秒数?目前,我有一个DispatchTimer定期调用以更新模拟,但计时不够准确,结果比应该的慢了60%左右(它会变化)。保留一个变量,在调用之间不会重置。 你的可能不需要像我的一样是静态的 private static DateTime _LastLogTime = DateTime.Now; 然后在方法中: // This ensures only the exact one Tick is

我正在调用一个更新函数来绘制一个实时模拟,我想知道是否有一种有效的方法来获取自上次更新以来经过的毫秒数?目前,我有一个DispatchTimer定期调用以更新模拟,但计时不够准确,结果比应该的慢了60%左右(它会变化)。

保留一个变量,在调用之间不会重置。
你的可能不需要像我的一样是静态的

private static DateTime _LastLogTime = DateTime.Now;
然后在方法中:

// This ensures only the exact one Tick is used for subsequent calculations
// Instead of calling DateTime.Now again and getting different values
DateTime NewTime = DateTime.Now;

TimeSpan ElapsedTime = NewTime - _LastLogTime;
_LastLogTime = NewTime;

string LogMessage = string.Format("{0,7:###.000}", ElapsedTime.TotalSeconds);
我只需要字符串中的千分之一秒,但是你可以得到更精确的时间跨度


还有一个
.totalmillizes
甚至
.Ticks
(最准确的)值,可以在生成的时间跨度内使用。

我会使用
秒表.GetTimestamp()
来获取刻度计数,然后比较前后的值。您可以通过以下方式将其转换为计时:

var startTicks = Stopwatch.GetTimestamp();
// Do stuff
var ticks = Stopwatch.GetTimestamp() - startTicks;

double seconds = ticks / Stopwatch.Frequency;
double milliseconds = (ticks / Stopwatch.Frequency) * 1000;
double nanoseconds = (ticks / Stopwatch.Frequency) * 1000000000;

您还可以使用
var sw=Stopwatch.StartNew()
sw.appead.totalms
之后,如果您只想计时不同的代码块。

尝试
System.Diagnostics.StopWatch
。我在回答中写了一个时钟:谢谢,这工作得很好,使用stopwatch.ElapsedTicks来测量滴答声计数。我建议使用
DateTime.UtcNow
用于这些目的,否则您将在时钟变化中得到虚假结果。