【问题标题】:Button Click event handler and using async void [duplicate]按钮单击事件处理程序并使用 async void [重复]
【发布时间】:2021-05-16 22:39:47
【问题描述】:

我对@9​​87654323@ 和按钮处理程序感到困惑。我在视频教程中听说使用async void 是不明智的。我已经查看了这些问题:

在许多答案中,它确实使用了这种语法。因此我的困惑。 ????

这是我的处理程序:

async private void InstallStyleButton_Clicked(object sender, EventArgs e)
{
    var customFileType =
        new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
        {
            {DevicePlatform.macOS, new[] {"xsl"} }
        });

    var pickResult = await FilePicker.PickAsync(new PickOptions
    {
        FileTypes = customFileType,
        PickerTitle = "Select template to install"

    });

    if(pickResult != null)
    {
        // Build target path
        string targetFile = Path.Combine("/Users/Shared/VisitsRota.MacOS/Styles", pickResult.FileName);

        // OK to install?
        if(!File.Exists(targetFile)) 
        {
            // Install
            File.Copy(pickResult.FullPath, targetFile);

            // Add it
            StylesPicker.ItemsSource.Add(pickResult.FileName);

            // Select it
            StylesPicker.SelectedItem = pickResult.FileName;
        }
    }
}

我意识到硬编码文件夹路径不是一个好主意,我最终会解决这个问题。除此之外,当我尝试它时,我的处理程序似乎在我的开发 MacBook Pro 上运行良好。

我可以将async void 与按钮处理程序一起使用吗?如果没有,我的处理程序应该如何调整?

【问题讨论】:

    标签: macos xamarin.forms xamarin.essentials


    【解决方案1】:

    我发现了这个link,上面写着:

    总结第一个准则,您应该更喜欢async Task 而不是async voidAsync Task 方法使错误处理、可组合性和可测试性更容易。 本指南的例外是异步事件处理程序,它必须返回void

    所以我的代码没问题。

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多