我有一个问题,我不能等待FormClosing事件内的异步函数,这将确定表单关闭是否应继续.我创建了一个简单的示例,如果您关闭而不保存,则会提示您保存未保存的更改(非常类似于记事本或微软词).我遇到的问题是,当我等待异步保存功能时,它会在保存功能完成之前关闭表单,然后在完成后返回结束功能并尝试继续.我唯一的解决方案是在调用SaveAsync之前取消关闭事件,然后如果保存成功,它将调用form.Close()函数.我希望有一种更清洁的方式来处理这种情况.
要复制方案,请创建一个带有文本框(txtValue),复选框(cbFail)和按钮(btnSave)的表单.这是表单的代码.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestZ
{
public partial class Form1 : Form
{
string cleanValue = "";
public Form1()
{
InitializeComponent();
}
public bool HasChanges()
{
return (txtValue.Text != cleanValue);
}
public void ResetChangeState()
{
cleanValue = txtValue.Text;
}
private async void btnSave_Click(object sender, EventArgs e)
{
//Save without immediate concern of the result
await SaveAsync();
}
private async Task<bool> SaveAsync()
{
this.Cursor …
Run Code Online (Sandbox Code Playgroud)