如何以模态方式打开MudBlazor对话框?为何代码未等对话框关闭就执行?
MudBlazor对话框未等待关闭就执行后续代码的原因及解决办法
问题原因
你当前的代码逻辑有误:Dialog.ShowAsync()方法的作用是异步创建并显示对话框,它会在对话框弹出后立刻返回一个IDialogReference对象,并不会等待用户关闭对话框。所以代码会直接跳到Console.Beep()执行,导致对话框还开着就发出蜂鸣音。
解决办法
要等待对话框关闭后再执行后续代码,需要等待IDialogReference的Result任务完成——这个任务会在对话框关闭时触发。修正后的代码如下:
private async Task ChangeAvatar() { var dialogRef = await Dialog.ShowAsync<DlgAvatarSelection>("Select avatar", new DialogOptions { CloseButton = true, CloseOnEscapeKey = true }); // 等待对话框关闭 var result = await dialogRef.Result; Console.Beep(1000, 25); }
如果需要判断用户是确认还是取消关闭对话框,可以进一步处理result对象:
if (!result.Cancelled) { // 用户确认关闭,执行后续逻辑 Console.Beep(1000, 25); }
内容的提问来源于stack exchange,提问作者Anders Lindén
相关产品推荐
相关产品推荐

