我认为这与我的方法中的异步任务有关,但我不明白为什么显示了我的三个中的一个,而其他的却没有。
在我的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");
}
}发布于 2019-02-20 09:47:33
您需要在UserDialogs.Instance.Alert内部调用Device.BeginInvokeOnMainThread
void DisplayDialog(String title, String message, String buttonText)
{
Device.BeginInvokeOnMainThread(() =>
UserDialogs.Instance.Alert(title: title, message: message, okText: buttonText));
}发布于 2019-02-19 21:04:38
我在共享代码中看到了一些问题:
async void CreateInitialTxts() --永远不要从异步方法返回void,而是从Task或Task<T>返回。在SO上有很多相关的线程,文章解释了这一点。简而言之,这是一种糟糕的做法,因为捕获异常可能很棘手。UserDialogs.Instance.Alert替换为UserDialogs.Instance.AlertAsync并等待它。如果希望让用户批准即将进行的操作,还可以考虑使用Prompt而不是Alert。UserDialogs.Instance.Alert --这是一个紧密的耦合,考虑用接口包装必要的功能,而不是使用具体的实现。发布于 2019-02-20 09:47:34
您可以在单击第一个对话框的“确定”之后显示第二个对话框,如下所示:
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");
}当单击第一个对话框的“确定”时,显示第二个对话框:
private void Show_Dialog2()
{
UserDialogs.Instance.Alert("txt", "txt", "txt");
}https://stackoverflow.com/questions/54774711
复制相似问题