为什么应用程序不等待用户的回答?

时间:2019-05-05 18:53:31

标签: xamarin.android

我正在尝试在xamarin.adroid应用程序中的WCF中创建一个端点,然后再创建一个代理。我有以下代码:

protected override void OnCreate(Bundle savedInstanceState)
{
    setEndPointAddress();

    setProxy();
}




private void setEndPointAddress()
{
    try
    {
        string myAddress = GestorConfiguracion.getDireccionServicio();
        _endPointAddress = new EndpointAddress(myAddress);
    }
    catch(UriFormatException)
    {
        string myTitle = "My title";
        string miStrMessage = "My error message.";
        ShowAlert(myTitle, miStrMessage);
    }
}




private void setProxy()
{
    if(_endPointAddress != null)
    {
        _proxy = new MyProxy(_binding, _endPointAddress);
    }
}




public void ShowAlert(string paramTitle, string paramMessage)
{
    Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
    alert.SetTitle(paramTitle);
    alert.SetMessage(paramMessage);
    alert.SetPositiveButton("OK", (senderAlert, args) => {

        //Code to be run after answer of the user
    });

    //run the alert in UI thread to display in the screen
    RunOnUiThread(() => {
        alert.Show();
    });
}

问题是OnCreate方法上的代码一直运行到最后,才向用户显示消息。我的意思是,如果我在OnCreate方法的setProxy()行中设置了一个断点,则该消息未在android仿真器中显示,我必须继续执行直到OnCreate方法的结尾,然后才是该消息显示。

显示警报的方法似乎不是异步的,也不是使我认为应该等待他的另一种方法。

实际上,如果我让代码运行到最后没有问题,但是我想知道它是如何工作的以了解它。

谢谢。

1 个答案:

答案 0 :(得分:1)

我会考虑将那些调用从OnCreate()转移到OnStart()或OnResume(),因为在您试图显示对话框时尚未创建活动。在OnCreate()返回之前,屏幕将不会开始绘制任何内容。

但是,即使您移动了该代码,主要的问题是AlertDialog不是模式对话框,因为Android不想让您阻塞UI线程。