c# xamarin.forms

c# - En Xamarin.Forms Device.BeginInvokeOnMainThread() no muestra el cuadro de mensaje de devolución de llamada de notificación*solo*en la configuración de la versión en el dispositivo físico



(1)

Estoy reescribiendo mi aplicación de terapia física iOS (rápida) "On My Nerves" en Xamarin.Forms. Es una aplicación de temporizador para ayudar a las personas con daño nervioso (¡como yo!) A hacer sus ejercicios de desensibilización. Tienes estos "tejidos" (por ejemplo, una pluma) donde cada tejido tiene una cuenta atrás de ''x'' segunda. Cuando el temporizador de Fabric llega a 0, aparece un cuadro de mensaje que dice "se acabó el tiempo". El usuario pulsa OK y la siguiente tela comienza su cuenta atrás. Enjuague y repita para todas las telas en la lista. Aquí hay un video que muestra el flujo de trabajo . Confía en mí en la UX en el video.

Aquí está mi código de ejemplo de aplicación que demuestra este comportamiento .

El método DoSomethingForNow (perdonar mi estrategia de nomenclatura) es la devolución de llamada desde NotificationService (vea la línea 65 - no hay suficientes puntos de representación SO para el enlace directo) que se crea cuando se inicia el temporizador, en caso de que la aplicación tenga el fondo.

La llamada específica que no está funcionando en el modo Liberación en el dispositivo está en la línea 115

Device.BeginInvokeOnMainThread( async () => await ShowAlertAndWaitForUser(currentFabricCount));

El async () => await ShowAlertAndWaitForUser(currentFabricCount)) funciona como se espera en la configuración de Debug y Release en el simulador de iOS, y en la configuración de Debug en el dispositivo.

Sin embargo, el cuadro de mensaje que indica que el tiempo ha transcurrido no aparece en la configuración de la versión en el dispositivo físico . No puedo entender por qué Device.BeginInvokeOnMainThread() no funciona en la configuración de la versión en el dispositivo. Que esta pasando?

Nota al Device.StartTimer() re utilizando Device.StartTimer()

La razón por la que Device.StartTimer() de Device.StartTimer() a la solución FrenchPressTimer de James (ver jamesmontemagno / FrenchPressTimer) es porque necesito una forma de cancelar / detener / lo que sea un Device.StartTimer() en caso de que el usuario necesite pausar o detener La cuenta atrás en la aplicación.

El código Device.StartTimer() funciona muy bien para mí en todas las configuraciones tanto en el simulador como en el dispositivo y, afortunadamente, alguien me mostró cómo cancelar un Device.StartTimer (¡gracias!). Si desea ver esta solución de trabajo, consulte saraford / Device-StartTimer-Working-Xamarin en GitHub.

Mi pregunta específica es por qué Device.BeginInvokeOnMainThread() muestra un cuadro de mensaje cuando se invoca desde una devolución de llamada de notificación en la configuración de la versión en un dispositivo físico.

También he probado las diferentes combinaciones de enlazadores. Sin efecto.