2017-12-14 1 views
0

내 앱에서 근무 시간을 계산하는 타이머를 설정하고 싶습니다. 타이머가 정상적으로 작동하지만 다른 페이지로 전환하면 작동이 멈 춥니 다. 타이머를 실행하고 백그라운드에서 실행되는 총 시간을 계산하는 방법. 여기 내 코드는xamarin 폼에서 백그라운드로 타이머를 실행하는 방법은 무엇입니까?

Stopwatch st = new Stopwatch(); 

private void WorkClockStart(object sender,EventArgs e) 
{ 
    if(LaborClock.Text == "Start Work Clock") 
    { 
     LaborClock.Text = "Stop Work Clock"; 

     Device.StartTimer(TimeSpan.FromMilliseconds(1),() => 
     { 
      st.Start(); 
      return false; 
     }); 
    } 
    else 
    { 
     st.Stop(); 
     long elapsed = st.ElapsedMilliseconds; 
     var sec = elapsed/1000; 
     DisplayAlert("Message", "Worked Time(Sec): " + sec, "ok"); 
     LaborClock.Text = "Start Work Clock"; 
     st.Reset(); 
    } 
} 

Xamarin.Forms에서 이것을 달성하는 방법은 무엇입니까?

+1

'Stopwatch' 변수를 응용 프로그램 (App.cs) 수준으로 이동하십시오. 이 페이지가 생성 될 때마다 다시 작성됩니다. – SushiHangover

답변

2

왜 타이머를 사용합니까? 시계를 시작할 때 DateTime.Now을 변수에 저장하고 델타를 중지 할 때 DateTime.Now으로 계산하십시오. 그런 다음 원하는 위치에 저장할 수 있습니다 (예 : static 변수 또는 요구 사항에 따라 원하는 경우 App.cs).

+1

Daniel의 답변에 추가하십시오. 타이머는 모바일 플랫폼에서 신뢰할 수 없습니다. 앱의 상태와 플랫폼에 따라 장기 실행 백그라운드 스레드에 대한 제한이 있습니다. 이러한 이유로 날짜 시간 델타는 훨씬 뛰어난 접근법입니다. –

관련 문제