Xamarin presenta DisplayAlert no se muestra cuando se le llama desde una function llamada por un delegado

Cuando llamo a Greet desde dentro de la function de tamaño, DisplayAlert muestra una alerta como se esperaba. Sin embargo, cuando se le llama desde el delegado después de un evento, registra a la salida con el nombre correcto (Greet ha sido llamado) pero DisplayAlert no aparece.

public class CustomPage : ContentPage { ... protected override void OnValidSizeAllocated(double width, double height) { ... Greet("Test"); app.FB.GetName(); app.FB.NameRecieved += (s,e) => { Greet(e.Name); }; } public void Greet(string name) { Utils.Log("Hey " + name); DisplayAlert("Hey " + name, "Welcome", "OK"); } } 

El Código anterior muestra "Hey Test" y luego aparece una alerta que dice "Hey Test, Welcome" con un button OK y luego "Hey Leo" (que es correcto porque ese es el nombre de la count de Facebook) pero luego no aparece ninguna alerta muestra

¿Se ha activado NameReceived dentro de la function GetName?

Tal vez necesites poner app.FB.GetName () después de "+ = {…};" bloquear.

Si nameReceived se dispara correctamente tal vez Greet no se está ejecutando en ui thread, intente envolver su código de visualización en

 Device.BeginInvokeOnMainThread (() => { DisplayAlert("Hey " + name, "Welcome", "OK"); }); 

como se describe aquí

¿Por qué no creas una class PageBase que implementa DisplayAlert y la envuelve en BeingInvokeOnMainThread para que no tengas que volver a escribirla?

 public class PageBase : ContentPage { public void DisplayAlert(string message,string title, string button) { Device.BeginInvokeOnMainThread (() => { DisplayAlert(message, title, button); }); } }