如何在xamarin窗体的后台运行计时器?
在我的应用程序中,我想设置一个计时器来计算工作时间。我的计时器工作正常,但当我切换到另一页时,它就停止工作了。如何在后台运行计时器和计算总运行时间。这是我的密码如何在xamarin窗体的后台运行计时器?,xamarin,xamarin.forms,Xamarin,Xamarin.forms,在我的应用程序中,我想设置一个计时器来计算工作时间。我的计时器工作正常,但当我切换到另一页时,它就停止工作了。如何在后台运行计时器和计算总运行时间。这是我的密码 Stopwatch st=新秒表(); 私有void WorkClockStart(对象发送方,事件参数e) { 如果(LaborClock.Text==“开始工作时钟”) { LaborClock.Text=“停止工作时钟”; Device.StartTimer(时间跨度从毫秒(1),()=> { st.Start(); 返回fals
Stopwatch st=新秒表();
私有void WorkClockStart(对象发送方,事件参数e)
{
如果(LaborClock.Text==“开始工作时钟”)
{
LaborClock.Text=“停止工作时钟”;
Device.StartTimer(时间跨度从毫秒(1),()=>
{
st.Start();
返回false;
});
}
其他的
{
st.Stop();
长时间运行=st.ElapsedMilliseconds;
var sec=经过的时间/1000;
显示警报(“消息”,“工作时间(秒):”+秒,“正常”);
LaborClock.Text=“开始工作时钟”;
圣重置();
}
}
如何在Xamarin.Forms中实现这一点?为什么要使用计时器?启动手表时,只需将
DateTime.Now
存储在一个变量中,然后使用DateTime.Now
停止手表时,即可计算增量。
然后,您可以在任何地方存储(例如,在
静态变量中,或者在App.cs中,如果您需要,可以根据您的要求)我同意Daniel的观点,您可以使用日期时间
和任务.工厂.StartNew
,如下代码
Task.Factory.StartNew( async() =>
{
var time = DateTime.Now;
var counter = 30;
transactionItem.RetryCount = 30;
do
{
await Task.Delay(1000);
counter = Math.Abs((DateTime.Now - time.AddSeconds(29)).Seconds);
} while (counter != 0 && time.AddSeconds(29) > DateTime.Now);
});
将您的Stopwatch
变量移动到应用程序(App.cs)级别,这样就不会在每次创建此页面时都重新创建它。添加到Daniel的好答案中。计时器在移动平台上不可靠。根据应用程序的状态和平台,对长时间运行的后台线程有限制。出于这个原因,Datetime delta是一种优越得多的方法。