首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳过Acr.UserDialogs警报

跳过Acr.UserDialogs警报
EN

Stack Overflow用户
提问于 2019-02-19 20:51:14
回答 3查看 945关注 0票数 1

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

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

你有什么主意吗?

代码语言:javascript
复制
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");
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-20 09:47:33

您需要在UserDialogs.Instance.Alert内部调用Device.BeginInvokeOnMainThread

代码语言:javascript
复制
void DisplayDialog(String title, String message, String buttonText)
{
    Device.BeginInvokeOnMainThread(() =>
        UserDialogs.Instance.Alert(title: title, message: message, okText: buttonText));
}
票数 0
EN

Stack Overflow用户

发布于 2019-02-19 21:04:38

我在共享代码中看到了一些问题:

  1. async void CreateInitialTxts() --永远不要从异步方法返回void,而是从TaskTask<T>返回。在SO上有很多相关的线程,文章解释了这一点。简而言之,这是一种糟糕的做法,因为捕获异常可能很棘手。
  2. UserDialogs.Instance.Alert替换为UserDialogs.Instance.AlertAsync并等待它。如果希望让用户批准即将进行的操作,还可以考虑使用Prompt而不是Alert
  3. UserDialogs.Instance.Alert --这是一个紧密的耦合,考虑用接口包装必要的功能,而不是使用具体的实现。
票数 0
EN

Stack Overflow用户

发布于 2019-02-20 09:47:34

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

代码语言:javascript
复制
  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");
    }

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

代码语言:javascript
复制
  private void Show_Dialog2()
    {
        UserDialogs.Instance.Alert("txt", "txt", "txt");
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54774711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档