2013-06-25 14 views
7

私はXamarin.Androidフレームワークが初めてです。私はカウントダウンタイマーで作業中ですが、java CountDownTimer classのように実装することはできません。誰でもJavaのcodeをC#Xamarinのアンドロイドコードに変換するために私を助けてください。このためSystem.Timers.Timerを使用しないのはなぜXamarin C#AndroidでCountDownTimerクラスを実装する方法は?

bar = (ProgressBar) findViewById(R.id.progress); 
    bar.setProgress(total); 
    int twoMin = 2 * 60 * 1000; // 2 minutes in milli seconds 

    /** CountDownTimer starts with 2 minutes and every onTick is 1 second */ 
    cdt = new CountDownTimer(twoMin, 1000) { 

     public void onTick(long millisUntilFinished) { 

      total = (int) ((dTotal/120) * 100); 
      bar.setProgress(total); 
     } 

     public void onFinish() { 
      // DO something when 2 minutes is up 
     } 
    }.start(); 
+0

コードはどこですか? –

+0

返信用のリンクを..thanksに追加しました –

+0

uiスレッドxamarinでこのコードを実行する方法を教えてください。android –

答えて

22

private System.Timers.Timer _timer; 
private int _countSeconds; 

void Main() 
{ 
    _timer = new System.Timers.Timer(); 
    //Trigger event every second 
    _timer.Interval = 1000; 
    _timer.Elapsed += OnTimedEvent; 
    //count down 5 seconds 
    _countSeconds = 5; 

    _timer.Enabled = true; 
} 

private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    _countSeconds--; 

    //Update visual representation here 
    //Remember to do it on UI thread 

    if (_countSeconds == 0) 
    { 
     _timer.Stop(); 
    } 
} 

別の方法は、内部の単純なループを持つ非同期Taskを、開始しCancellationTokenを使用して、それをキャンセルすることです。

private async Task TimerAsync(int interval, CancellationToken token) 
{ 
    while (token.IsCancellationRequested) 
    { 
     // do your stuff here... 

     await Task.Delay(interval, token); 
    } 
} 

その後

var cts = new CancellationTokenSource(); 
cts.CancelAfter(5000); // 5 seconds 

TimerAsync(1000, cts.Token); 

でそれを起動するだけでTaskCancelledExceptionをキャッチすることを忘れないでください。

+2

お返事ありがとうございます.UMIスレッドxamarin androidでこのコードを実行する方法を教えていただけますか? –

+7

'RunOnUiThread(()=> {/ * UIの更新* /});' – Cheesebaron

関連する問題