小编Hag*_*t18的帖子

等待FormClosing事件中的异步函数

我有一个问题,我不能等待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)

c# formclosing async-await .net-4.5

30
推荐指数
1
解决办法
8595
查看次数

标签 统计

.net-4.5 ×1

async-await ×1

c# ×1

formclosing ×1