我对async void
和按钮处理程序感到困惑。我在一个视频教程中听说使用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
与按钮处理程序?如果不是,我的联络人该如何调整?
我发现了这个链接,上面写着:
总结第一条准则,您应该更喜欢
async Task
而不是async void
。Async Task
方法支持更容易的错误处理、可组合性和可测试性。该准则的例外是异步事件处理程序,它必须返回void
。
所以我的代码没问题。