c# - mostrar - userdialogs xamarin forms ios
Xamarin forma DisplayAlert que no se muestra cuando se llama desde una función llamada por un delegado (2)
Cuando llamo a Greet desde el interior de la función de tamaño, DisplayAlert muestra una alerta como se esperaba Sin embargo, cuando se llama desde el delegado después de un evento, se registra en la salida con el nombre correcto (se ha llamado a Greet) pero no se muestra DisplayAlert.
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 de arriba muestra "Hey Test" y luego aparece una alerta que dice "Hey Test, Welcome" con un botón OK y luego arroja "Hey Leo" (que es correcto porque ese es el nombre de la cuenta de Facebook) pero luego no hay Alerta muestra.
¿Por qué no creas una clase 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);
});
}
}
¿Se inicia NameReceived dentro de la función GetName?
Tal vez necesites poner app.FB.GetName () después de "+ = {...};" bloquear.
Si nameReceived se activa correctamente, es posible que Greet no se esté ejecutando en el subproceso ui, intente ajustar el código de visualización en
Device.BeginInvokeOnMainThread (() => {
DisplayAlert("Hey " + name, "Welcome", "OK");
});
como se describe aquí