Silverlight用のStopWatchはありません。銀色のストップウォッチ?
代わりに何を使用しますか?
私はストーリーボードクラスから空のアニメーションを作成し、(GetCurrentTimeを呼び出すために言って人々)に関するいくつかの記事を見て、私はそれが仕事を得ることができませんでした...
あなたは何をしますか?
Silverlight用のStopWatchはありません。銀色のストップウォッチ?
代わりに何を使用しますか?
私はストーリーボードクラスから空のアニメーションを作成し、(GetCurrentTimeを呼び出すために言って人々)に関するいくつかの記事を見て、私はそれが仕事を得ることができませんでした...
あなたは何をしますか?
これにはいくつかのことがあります。拳は、hereのようにEnvironment.TickCountのようなものを使用しています。しかし、私がうまくいくと思うことは、DispatcherTimerを使うことです。
Stoppatchesのように動作するようにDispatcherTimerを設定するには、実行されている時間を表すTimeSpanも関連付けられている必要があります。 DispatcherTimerをインスタンス化し、それが実行される間隔とTickイベントのハンドラを設定できます。我々はストップウォッチデータを開始し、私たちのタイマーを停止するのは簡単なものを作るだけでなく、表示することができUIで
DispatcherTimer _timer;
TimeSpan _time;
public Page()
{
InitializeComponent();
_timer = new DispatcherTimer();
_timer.Interval = new TimeSpan(0, 0, 0, 0, 10);
_timer.Tick += new EventHandler(OnTimerTick);
}
:
今
<StackPanel>
<Button Content="Start" x:Name="uiStart" Click="OnStartClick" />
<Button Content="Stop" x:Name="uiStop" Click="OnStopClick" />
<TextBlock x:Name="uiDisplay"/>
</StackPanel>
、すべてのことが残っているが、イベントハンドラです。
OnTimerTickハンドラは、ストップウォッチデータをインクリメントして表示します。
Start Handlerが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();
}
私は同じアプローチを使ってみましたが、結果は正しくありませんでした。たぶん機能オーバーヘッドやハードウェアのために、アプリの時間が実際の壁時計よりも遅くなります。あなたは助けてこれを修正できますか? – letsc
私の時計はhereです。ソースコードはhereです。それに関する2つの記事は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));
}
非常に面白い!ハハ –
これはどのくらい質問に追加するか分かりませんが、とても良いです! – Aardvark
これは私がやったことです。そのシンプルでうまく働いてくれました。
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つの長い変数に合計ティックを保持するだけでした。
良い簡単な解決策、私はファンです。 – themaestro
タイムゾーンなどについて実際に気にしない限り、 'DateTime.UtcNow'を使用してください。 – Yaur
このページは存在しているようだから - http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.startnew(v=VS.95).aspx –
@James That is確かに非常に興味深い。そのページはちょうどそこにエラーがあるか、SL5に来ているかもしれません。このポストはWP7 dllを参照し、そのStopwatchクラスを使用できることを示唆しています。私はそれを試していない。 http://forums.silverlight.net/forums/p/207108/486425.aspx – Oskar
@James、@Oskar:Silverlight用のストップウォッチは存在しますが、XNA Framework用です。あなたのリンクのバージョン情報セクションを見て、それをSystem.Booleanのようなものと比較してください:http://msdn.microsoft.com/en-us/library/system。ブール値%28v = VS.95%29.aspx –