Acr.UserDialogs警报被跳过

时间:2019-02-19 20:51:14

标签: c# xamarin.forms

我认为这与我的方法中的异步任务有关,但是我不明白为什么显示了我的三个Alert中的一个而其他的却没有。< / p>

显示了if条件末尾的那个,我希望用户提交第一个Alert,然后它将继续。

你有个主意吗?

async void CreateInitialTxts()
    {
        if (InternetConnectionExists)
        {
            UserDialogs.Instance.Alert("txt", "txt", "txt");

            var dataDevices = await downloadDevices.GetDevicesTxt();
            fileHandler.CreateTxt("devices.txt", dataDevices);
            var dataGasStations = await downloadGasStations.GetGasStationsTxt();
            fileHandler.CreateTxt("gasstations.txt", dataGasStations);
            fileHandler.CreateTxt("initialsync.txt", "false");

            UserDialogs.Instance.Alert("txt", "txt", "txt");
        }
        else
        {
            UserDialogs.Instance.Alert("txt", "txt", "txt");
        }
    }

3 个答案:

答案 0 :(得分:0)

我在共享代码中看到了几个问题:

  1. async void CreateInitialTxts()-永远不会从异步方法返回void,而是TaskTask<T>。 SO和articles上有很多相关的线程对此进行了解释。简而言之,这是一个坏习惯,因为捕获异常可能很棘手。
  2. UserDialogs.Instance.Alert替换为UserDialogs.Instance.AlertAsync,然后等待它。如果您想让用户批准即将进行的操作,也可以考虑使用Prompt而不是Alert
  3. UserDialogs.Instance.Alert是紧密的耦合,请考虑通过接口包装必要的功能,并使用该接口代替具体的实现。

答案 1 :(得分:0)

您需要在SELECT Convert(datetime, FORMAT(20080910173240, '####-##-## ##:##:##'), 101); 内部致电UserDialogs.Instance.Alert

Device.BeginInvokeOnMainThread

答案 2 :(得分:0)

您可以在单击第一个对话框的“确定”后显示第二个Dialgo,如下所示:

void DisplayDialog(String title, String message, String buttonText)
{
    Device.BeginInvokeOnMainThread(() =>
        UserDialogs.Instance.Alert(title: title, message: message, okText: buttonText));
}

在第一个对话框中单击“确定”时,显示第二个对话框:

  if (InternetConnectionExists)
    {
        //Create an AlertConfig
        var  config = new AlertConfig();
        config.Message = "txt";
        config.Title = "txt";
        config.OkText = "txt";

        //create action of "ok"
        config.OnAction += Show_Dialog2;
        UserDialogs.Instance.Alert(config);          

    }
    else
    {
        UserDialogs.Instance.Alert("txt", "txt", "txt");
    }