2017-04-24 13 views
0

こんにちは私はScoreboard UWPアプリを書いています。私はタイマーの背後にコードを作る方法を知りたいと思います。バスケットボールのスコアボードであるため、2クロック、1秒間のみ(ショットクロック)、1分間と2秒間を管理するその他のクロックがあります。 UWPでこのようなカウントダウンを行う簡単な方法があるかどうかを知りたいと思います。カウントダウンタイマーの作成方法は?

私はこれを見つけたが、それがダウンしていないカウントアップ:

private void stopwatch_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     if (_stopwatch.IsRunning) 
     { 
      _stopwatch.Stop(); 
      _timer.Dispose(); 
     } 
     else 
     { 
      _stopwatch.Start(); 
      _timer = new Timer(updateTime, null, (int)TimeSpan.FromMinutes(1).TotalMinutes, Timeout.Infinite); 
     } 

    } 

    private async void updateTime(object state) 
    { 
     await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
       { 

        stopwatchLbl.Text = String.Format("{0:00}:{1:00}:{2:00}", _stopwatch.Elapsed.TotalMinutes, _stopwatch.Elapsed.TotalSeconds, _stopwatch.Elapsed.TotalMilliseconds/10); 

        //stopwatchLbl.Text = "00:00:00"; 

       } 
      ); 

    } 
+2

あなたはこれまでに何を試しましたか?研究の証拠を提供してください... –

+0

はい、私は多くの研究をしましたが、有用なUWPのために何も見つかりませんでした。カウントダウンしてもダウンしないタイマーだけです... idk –

答えて

1

あなたは私からUWPHelper.Utilities.ThreadPoolTimerを使用することができますNuGetパッケージUWPHelper。ダウンロードできるようにするには、NuGet Package ManagerのInclude pre-releaseチェックボックスをチェックする必要があります。

私のThreadPoolTimerSystem.Threading.Timerのラッパークラスで、DispatcherTimerと同様に動作しますが、UIスレッドではなくThreadPoolで動作します。

using UWPHelper.Utilities; 

// TimeSpan indicates the interval of the timer 
ThreadPoolTimer timer = new ThreadPoolTimer(TimeSpan.FromSeconds(1)); 
timer.Tick += OnTick; 

void OnTick(object sender, EventArgs e) 
{ 
    // Method invoked on Tick - every second in this scenario 
} 

// To start the timer 
timer.Start(); 

// To stop the timer 
timer.Stop(); 
+0

"毎秒呼び出されます。次のコードを 'ShotClockText.Text = Convert.ToString(shotclocktime-1);'に置き、毎秒ではなく1をカウントし、plsのヘルプだけをカウントします。 –

+0

私の答えはもっと明白になるように更新しました –

+0

私のUIでこのように動作させることはできません:(でも、とにかく、他の回答と一緒に働きます。ありがとう、 –

1

は、このコードを試してみてください、私はそれはあなたを助ける願っ:)

internal class countDownTimer 
    { 
     public int enlapsedTime; 
     private DispatcherTimer dispatch; 

     public delegate void MyCallback(); 
     public delegate void MyCallback2(int value); 
     public MyCallback OnStartTime; 
     public MyCallback OnStopTime; 
     public MyCallback OnEndTime; 
     public MyCallback2 OnCountTime; 

     public countDownTimer() 
     { 
      Debug.WriteLine("StopWatch init"); 
      enlapsedTime = 0; 
      dispatch = new DispatcherTimer(); 
      dispatch.Interval = new TimeSpan(0, 0, 1); 
      dispatch.Tick += timer_Tick; 
     } 

     private void timer_Tick(object sender, object e) 
     { 
      enlapsedTime--; 
      Debug.WriteLine(enlapsedTime); 

      if (OnCountTime != null) OnCountTime(enlapsedTime); 

      if (enlapsedTime < 0) 
      { 
       enlapsedTime = 0; 
       dispatch.Stop(); 
       if (OnEndTime != null) OnEndTime(); 
      } 
     } 

     public void Start() 
     { 
      dispatch.Start(); 
      if (OnStartTime != null) OnStartTime(); 
      Debug.WriteLine("iniciar contador"); 
     } 

     public void Stop() 
     { 
      dispatch.Stop(); 
      if (OnStopTime != null) OnStopTime(); 
      Debug.WriteLine("parar contador"); 
     } 

     public bool IsEnabled 
     { 
      get 
      { 
       return dispatch.IsEnabled; 
      } 
     } 

    } 
+0

'DispatcherTimer'はUIスレッドあまり正確ではありません。 –

+0

これは最終的に私のUIにデバッグツールを使用するのではなく、それを適合させるために働くことになります。精度/正確さについてはidk/idcが機能します –

関連する問題