Silverlight没有StopWatch。
你会用什么而不是它?
我看到一些关于人们说要创建空动画并从Storyboard类调用GetCurrentTime()的帖子,我无法让它工作......
你会做什么?
答案 0 :(得分:24)
这就是我所做的。它很简单,对我来说非常好用:
long before = DateTime.Now.Ticks;
DoTheTaskThatNeedsMeasurement();
long after = DateTime.Now.Ticks;
TimeSpan elapsedTime = new TimeSpan(after - before);
MessageBox.Show(string.Format("Task took {0} milliseconds",
elapsedTime.TotalMilliseconds));
您需要做的就是在开始目标任务之前保留一个包含总刻度的长变量。
答案 1 :(得分:6)
在here看我的手表。源代码是here。关于它的两篇文章是here和here。 Silverlight动画模型非常适合秒表。
alt text http://xmldocs.net/ball2/background.png
<Storyboard x:Name="Run" RepeatBehavior="Forever">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="SecondHand" x:Name="SecondAnimation"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:01:00" Value="360"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="MinuteHand"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="01:00:00" Value="360"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="HourHand"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="12:00:00" Value="360"/>
运行该故事板的代码在这里:
private void RunWatch()
{
var time = DateTime.Now;
Run.Begin();
Run.Seek(new TimeSpan(time.Hour, time.Minute, time.Second));
}
答案 2 :(得分:4)
以下是您可以添加到项目中的Stopwatch替换课程。
答案 3 :(得分:2)
你可以做一些事情。拳头就像人here一样使用像Environment.TickCount这样的东西。但是,我认为可能更好的方法是使用DispatcherTimer。
要设置DispatcherTimer以像秒表一样工作,我们还需要一个关联的TimeSpan来表示它的运行时间。我们可以实例化DispatcherTimer并设置它的时间间隔,以及Tick事件的处理程序。
DispatcherTimer _timer;
TimeSpan _time;
public Page()
{
InitializeComponent();
_timer = new DispatcherTimer();
_timer.Interval = new TimeSpan(0, 0, 0, 0, 10);
_timer.Tick += new EventHandler(OnTimerTick);
}
在UI中我们可以创建一些简单的东西来启动和停止我们的计时器,以及显示秒表数据:
<StackPanel>
<Button Content="Start" x:Name="uiStart" Click="OnStartClick" />
<Button Content="Stop" x:Name="uiStop" Click="OnStopClick" />
<TextBlock x:Name="uiDisplay"/>
</StackPanel>
现在,剩下的就是事件处理程序。
OnTimerTick处理程序将递增并显示我们的秒表数据。
我们的Start处理程序将负责我们的TimeSpan的初始化/重新注册,而Stop处理程序将停止DispatcherTimer。
void OnTimerTick(object sender, EventArgs e)
{
_time = _time.Add(new TimeSpan(0, 0, 0, 0, 10));
display.Text = _time.ToString();
}
private void OnStartClick(object sender, RoutedEventArgs e)
{
_time = new TimeSpan(0,0,0,0,0);
_timer.Start();
}
private void OnStopClick(object sender, RoutedEventArgs e)
{
_timer.Stop();
}