银色秒表?

Pau*_*ulo 22 silverlight

Silverlight没有StopWatch.

你会用什么而不是它?

我看到一些关于人们说要创建一个空动画并从Storyboard类调用GetCurrentTime()的帖子,我无法让它工作......

你会怎么做?

moo*_*ock 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));
Run Code Online (Sandbox Code Playgroud)

您需要做的就是在开始目标任务之前保留一个包含总刻度的长变量.


Mic*_*ter 6

看我的手表.源代码在这里.关于它的两篇文章就在这里这里.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"/>
Run Code Online (Sandbox Code Playgroud)

并运行该故事板的代码在这里:

private void RunWatch()
{
    var time = DateTime.Now;

    Run.Begin();

    Run.Seek(new TimeSpan(time.Hour, time.Minute, time.Second));
}
Run Code Online (Sandbox Code Playgroud)

  • 非常有趣!哈哈 (5认同)

rmo*_*ore 2

您可以用它做一些事情。第一个是像这里的人一样使用像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);
}
Run Code Online (Sandbox Code Playgroud)

在 UI 中,我们可以创建一些简单的东西来启动和停止计时器,以及显示秒表数据:

 <StackPanel>
        <Button Content="Start" x:Name="uiStart" Click="OnStartClick"  />
        <Button Content="Stop" x:Name="uiStop" Click="OnStopClick" />
        <TextBlock x:Name="uiDisplay"/>
 </StackPanel>
Run Code Online (Sandbox Code Playgroud)

现在,剩下的就是事件处理程序了。
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();
 }
Run Code Online (Sandbox Code Playgroud)