¿Cómo puedo cancelar desde Device.StartTimer?

Cuando uso System.Threading.Timer puedo detener mi temporizador e iniciarlo de nuevo:

protected override void OnScrollChanged(int l, int t, int oldl, int oldt) { if (timer == null) { System.Threading.TimerCallback tcb = OnScrollFinished; timer = new System.Threading.Timer(tcb, null, 700, System.Threading.Timeout.Infinite); } else { timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); timer.Change(700, System.Threading.Timeout.Infinite); } } 

¿Cuál es la mejor manera de detener Device.StartTimer e iniciarlo de nuevo?

One Solution collect form web for “¿Cómo puedo cancelar desde Device.StartTimer?”

Supongo que se está refiriendo a Device.StartTime en XamarinForms. La forma de detener o continuar una tarea recurrente se determina por lo que devuelve el segundo argumento:

 // run task in 2 minutes Device.StartTimer(TimeSpan.FromMinutes(2), () => { if (needsToRecur) { // returning true will fire task again in 2 minutes. return true; } // No longer need to recur. Stops firing task return false; }); 

Si desea detener temporalmente este temporizador y volver a dispararlo después de algún tiempo, deberá volver a llamar a Device.StartTimer . Sería agradable para envolver esto en su propia clase donde se puede utilizar a un miembro privado para determinar si una tarea continua todavía se está ejecutando. Algo como esto:

 public class DeviceTimer { readonly Action _Task; readonly List<TaskWrapper> _Tasks = new List<TaskWrapper>(); readonly TimeSpan _Interval; public bool IsRecurring { get; } public bool IsRunning => _Tasks.Any(t => t.IsRunning); public DeviceTimer(Action task, TimeSpan interval, bool isRecurring = false, bool start = false) { _Task = task; _interval = interval; IsRecurring = isRecurring; if (start) Start(); } public void Restart() { Stop(); Start(); } public void Start() { if (IsRunning) // Already Running return; var wrapper = new TaskWrapper(_Task, IsRecurring, true); _Tasks.Add(wrapper); Device.StartTimer(_interval, wrapper.RunTask); } public void Stop() { foreach (var task in _Tasks) task.IsRunning = false; _Tasks.Clear(); } class TaskWrapper { public bool IsRunning { get; set; } bool _IsRecurring; Action _Task; public TaskWrapper(Action task, bool isRecurring, bool isRunning) { _Task = task; _IsRecurring = isRecurring; IsRunning = isRunning; } public bool RunTask() { if (IsRunning) { _Task(); if (_IsRecurring) return true; } // No longer need to recur. Stop return IsRunning = false; } } } 
  • Recursos para Android de Xamarin NotFoundException ZXingNetMobile
  • Xamarin Archivo de recursos Android no encontrado
  • NDK no se encuentra en la ubicación especificada
  • Establecer un icono de marcador en Google Maps API
  • Evitar que la actividad se reinicie cuando cambie la orientación
  • TaskCompletionSource y descartar causas que múltiples alertas personalizadas no aparecen
  • Cómo enlazar Android TextView a evento Click con MvvmCross
  • Arrastrar y soltar en formas Xamarin
  • APK construido por xamarin en mac no está instalando
  • ¿Cómo muevo la carpeta Android SDK instalada con Visual Studio 2017?
  • OnResume Cámara Reinit Negro Pantalla
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.