Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 计算不含DateTime.UtcNow的持续时间_Silverlight - Fatal编程技术网

Silverlight 计算不含DateTime.UtcNow的持续时间

Silverlight 计算不含DateTime.UtcNow的持续时间,silverlight,Silverlight,我需要计算Silverlight 3.0中从一个状态到另一个状态的时间 最常见的做法是: DateTime Start = DateTime.UtcNow; . . . DateTime End = DateTime.UtcNow; TimeSpan Duration = End - Start; 但是,这不包括用户更改计算机时间的情况。 有没有办法使用其他计时器获得相同的效果?例如,一个计时器,用于计算计算机在C中轻松打开但在SL中被阻止后的时间,或者任何其他不基于DateTime.Now或

我需要计算Silverlight 3.0中从一个状态到另一个状态的时间

最常见的做法是:

DateTime Start = DateTime.UtcNow;
.
.
.
DateTime End = DateTime.UtcNow;
TimeSpan Duration = End - Start;
但是,这不包括用户更改计算机时间的情况。 有没有办法使用其他计时器获得相同的效果?例如,一个计时器,用于计算计算机在C中轻松打开但在SL中被阻止后的时间,或者任何其他不基于DateTime.Now或DateTime.UtcNow的计时器

吉拉德。

您可以将间隔设置为所需的分辨率,然后通知调度员:-

Private WithEvents timer as DispatchTimer = New DispatcherTimer()
Private counter As Integer = 0

Private Sub TimerClick(ByVal sender as System.Object, ByVal e As EventArgs) Handles timer.Tick
   counter += 1
End Sub

Private Sub StartTiming()
   counter = 0
   timer,Interval = TimeSpan.FromSeconds(1)
   timer.Start()
End Sub

Private Function EndTiming() as TimeSpan
   timer.Stop()
   Return TimeSpan.FromSeconds(counter)
End Function
您可以将间隔设置为所需的分辨率,并将其发送给调度员:-

Private WithEvents timer as DispatchTimer = New DispatcherTimer()
Private counter As Integer = 0

Private Sub TimerClick(ByVal sender as System.Object, ByVal e As EventArgs) Handles timer.Tick
   counter += 1
End Sub

Private Sub StartTiming()
   counter = 0
   timer,Interval = TimeSpan.FromSeconds(1)
   timer.Start()
End Sub

Private Function EndTiming() as TimeSpan
   timer.Stop()
   Return TimeSpan.FromSeconds(counter)
End Function

您可以尝试使用保存DateTime的Dispatchermer来检测计算机时间的更改。现在,在每个刻度上添加一个变量。然后在下一次勾选时,检查当前时间是否等于保存的值+计时器运行的时间间隔。然后,如果不是,我想你可能会弹出一些警告,说没有作弊或其他什么,然后中止你的应用程序。这样,您仍然可以使用正确的方法计算时间跨度,并且仍然可以防止用户更改计算机时间。我想您必须考虑到前面提到的计时器中可能出现的延迟,并以某种方式进行调整。除非计算机时间发生重大变化,否则您不希望该警报弹出

您可以尝试使用保存DateTime的Dispatcher来检测计算机时间的更改。现在,在每个刻度上添加一个变量。然后在下一次勾选时,检查当前时间是否等于保存的值+计时器运行的时间间隔。然后,如果不是,我想你可能会弹出一些警告,说没有作弊或其他什么,然后中止你的应用程序。这样,您仍然可以使用正确的方法计算时间跨度,并且仍然可以防止用户更改计算机时间。我想您必须考虑到前面提到的计时器中可能出现的延迟,并以某种方式进行调整。除非计算机时间发生重大变化,否则您不希望该警报弹出

如果您不需要从时间服务器进行精确提取?

如果您不需要从时间服务器进行精确提取?

您需要检索与绝对时间无关的时间戳。System.Diagnostics.Stopwatch可以实现这一点,而且它还有更高的分辨率。

您需要检索与绝对时间无关的时间戳。System.Diagnostics.Stopwatch可以实现这一点,而且它的分辨率也要高得多。

这是可能的,但由于调度程序使用优先级队列,因此无法保证计算的持续时间是准确的,并且随着时间的推移,延迟会越来越大time@Gilad字体我想这取决于你的决心是什么?分钟秒?毫秒?还取决于是否可以跳过事件或是否所有事件都已排队。您希望使间隔明显小于所需的分辨率。您还可以将此方法与比较日期相结合,此方法允许您检测interval和DateTime差之间的严重不匹配,从而指示已修改的系统时间。这是可能的,但由于调度程序使用优先级队列,因此无法保证计算的持续时间是准确的,并且随着时间的推移,延迟会越来越大time@Gilad:我想是吧取决于你的决心是什么?分钟秒?毫秒?还取决于是否可以跳过事件或是否所有事件都已排队。您希望使间隔明显小于所需的分辨率。您还可以将此方法与比较日期相结合,此方法允许您检测间隔和日期时间差之间的重大不匹配,从而指示已修改的系统时间。