.NET MAUI PopUp CloseAsync() 未完成

问题描述 投票:0回答:1

我正在尝试使用 PopUpService 来显示 Popup,一方面它接受一个参数并返回一个参数。

不幸的是,返回后弹出窗口似乎没有完成异步任务,我不知道为什么。我认为需要某种 CancellationToken。

这里是必要的代码: 在一个 ViewModel 中,PopUp 被称为:

public partial class SomeViewModel
{
    private readonly IPopupService _popupService;

    // ...

    public SomeViewModel(
        IPopupService popupService)
    {
        _popupService = popupService;
    }
    
    [RelayCommand]
    private async Task OnCallingPopUpAsync()
    {
        var result = await _popupService.ShowPopupAsync<PopupViewModel>(
                onPresenting: viewModel => viewModel.TransferValue(true)
            );
        if (result is bool boolResult)
            Debug.WriteLine("Success!!");
        else
            return;
    }
}

在 PopupViewModel 中接收值。此外,在 View 中可以通过按下按钮并调用 ClosePopupCommand 来关闭 PopupView:

public partial class PopupViewModel : Popup
{
    public ImagePickerViewModel() {}

    [RelayCommand]
    private async Task OnClosePopup()
    {
        await CloseAsync(true);
    }

    public void TransferValue(bool value)
    {
        Debug.WriteLine($"The transferred value is {value}");
    }
}

尽管如此,弹出窗口并未关闭。

我尝试传递 CancellationToken (类似于在 MS Docs 中执行的方式,如下所示:

[RelayCommand]
private async Task OnClosePopup()
{
    var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1));
    await CloseAsync(true, token: cts.Token);
}

然而,这产生了一个异常:

System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'

我该如何解决这个问题?

asynchronous popup maui maui-community-toolkit
1个回答
0
投票

dotnet 和 MAUI 版本是什么?您正在测试 iOS 或 Android 的平台?

© www.soinside.com 2019 - 2024. All rights reserved.