Silverlight 용 StopWatch가 없습니다.실버 라이트 용 스톱워치?
대신 무엇을 사용 하시겠습니까?
나는 비어있는 애니메이션을 만들고, 나는 그것을 작동시킬 수없는 스토리 보드 클래스에서 GetCurrentTime()를 호출하는 말하는 사람들에 대한 몇 가지 게시물 ...당신은 무엇을 할 것을 보았다?
Silverlight 용 StopWatch가 없습니다.실버 라이트 용 스톱워치?
대신 무엇을 사용 하시겠습니까?
나는 비어있는 애니메이션을 만들고, 나는 그것을 작동시킬 수없는 스토리 보드 클래스에서 GetCurrentTime()를 호출하는 말하는 사람들에 대한 몇 가지 게시물 ...당신은 무엇을 할 것을 보았다?
여기에 할 수있는 몇 가지 사항이 있습니다. 주먹은 사람 here처럼 Environment.TickCount와 같은 것을 사용합니다. 그러나 더 잘 작동한다고 생각되는 부분은 DispatcherTimer을 사용하는 것입니다.
스톱워치처럼 작동하도록 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 핸들러는 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입니다. 그것에 관한 두 개의 기사는 here과 here입니다. Silverlight 애니메이션 모델은 스톱워치에 적합합니다.
하고 스토리 보드를 실행하는 코드
<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"/>
alt text http://xmldocs.net/ball2/background.png
은 여기에 있습니다 : 여기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));
목표 작업을 시작하기 전에 하나의 긴 변수를 총 틱수로 유지해야했습니다.
좋은 간단한 해결책, 저는 팬입니다. – 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 –