ExecuteNonQueryAsync关闭表单

时间:2017-10-04 15:28:27

标签: c# winforms asynchronous

我最近发现了C#的awaitasync关键字,并且一直试图在我的一些项目中使用它们。但是,我的一个表单开始意外关闭。我已经能够在下面的示例代码中复制该问题:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        (new Form1()).ShowDialog();
        Console.WriteLine("Done");
    }
}

这是一个仅包含onClick事件与button1_Click相关联的按钮的表单。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private async void button1_Click(object sender, EventArgs e)
    {
        Visible = false;
        using (SqlConnection conn = new SqlConnection("Data Source=TestDb;Integrated Security=SSPI"))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("SELECT NULL", conn))
            {
                await cmd.ExecuteNonQueryAsync();
            }
        }
        Console.WriteLine("Test");
        Visible = true;
    }
}

当我运行它并单击按钮时,我可以退到await cmd.ExecuteNonQueryAsync()行,但是执行跳转到Main()方法并在退出之前将“完成”写入控制台。如果我不使表单不可见,如果我使用Application.Show而不是ShowDialog()来调用它,或者我使用cmd.ExecuteNonQuery().Wait()cmd.ExecuteNonQuery()而不是{{1} }}关键字,按钮按预期工作,表单不关闭。是什么导致表格意外关闭?

0 个答案:

没有答案