MAUI中for循环DisplayAlert显示异常:首次显示1而非0求助
MAUI中DisplayAlert循环弹窗顺序颠倒问题解决
问题现象
在MAUI中循环调用DisplayAlert时,弹窗显示顺序不符合预期:首次弹出的是1而非0,两次弹窗顺序颠倒。但在Windows Forms中使用逻辑一致的MessageBox.Show代码,能正常按0、1的顺序显示弹窗。
问题原因
MAUI的DisplayAlert是异步方法,在同步事件处理方法中直接调用时,不会等待弹窗关闭就会执行下一次循环迭代。循环会快速完成两次调用,而弹窗的实际显示顺序由异步任务的调度顺序决定,因此出现颠倒。
而Windows Forms的MessageBox.Show是同步方法,会阻塞当前线程直到用户关闭弹窗,所以循环会严格按顺序执行。
解决方法
将事件处理方法改为异步,在每次调用DisplayAlert时使用await关键字等待弹窗操作完成,再进入下一次循环:
private async void OnCounterClicked(object sender, EventArgs e) { for (int i = 0; i < 2; i++) await DisplayAlert(i.ToString(), "message", "cancel"); }
说明
- 添加
async修饰符将方法声明为异步方法 await会暂停当前方法的执行,直到DisplayAlert对应的弹窗关闭,确保循环严格按顺序迭代,弹窗显示顺序符合预期。
内容的提问来源于stack exchange,提问作者001
相关产品推荐
相关产品推荐

