C# 当我已经在按钮单击事件处理程序中时,如何等待单击提交按钮? 用户提交表单。 表单包含两个用于验证的密码字段。 在SubmitButton_Click中,我使用do/while循环进行验证。

C# 当我已经在按钮单击事件处理程序中时,如何等待单击提交按钮? 用户提交表单。 表单包含两个用于验证的密码字段。 在SubmitButton_Click中,我使用do/while循环进行验证。,c#,visual-studio-2015,C#,Visual Studio 2015,如果密码不正确,我想在do循环中等待再次单击submit按钮 // Try/Catch block looks for issues with database connection try { int passwordtest = 0; //checks that password entries are the same do { //*******WAIT HERE FOR S

如果密码不正确,我想在do循环中等待再次单击submit按钮

    // Try/Catch block looks for issues with database connection
    try
    {
        int passwordtest = 0;
        //checks that password entries are the same

        do
        {
            //*******WAIT HERE FOR SUBMIT BUTTON TO BE CLICKED AGAIN


                if (PasswordText.Text.Equals(ReEnterPasswordText.Text))
                {
                    MessageBox.Show("Passwords Match.");
                    passwordtest = 0;
                }
                else
                {
                    passwordtest = passwordtest + 1;
                    MessageBox.Show("Passwords do not match. Please try again.");
                    PasswordText.Clear();
                    ReEnterPasswordText.Clear();

                }

        } while (passwordtest == 1);

        conDataBase.Open();
        myReader = cmdDataBase.ExecuteReader();
        MessageBox.Show("Saved");
        while (myReader.Read())
        {



        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

正如@MikeD在评论中所说,您不想等待事件处理程序中的按钮单击

您也不希望在事件处理程序中执行所有数据库处理

问题是,有一个线程专用于处理所有用户界面活动——UI线程。如果在与UI相关的事件处理程序中进行了太多的处理(如while myReader.Read循环),则会占用UI线程,这意味着您的应用程序将失去响应

当你的应用程序在数据库代码中处于忙碌状态时,它将无法响应其他单击,如“取消”或“关闭”按钮

理想情况下,您希望将数据库处理工作卸载到另一个线程,然后从Submit按钮处理程序开始这项工作。搜索响应用户界面以查找相关文章,如


您还可以考虑更改UI以更早地测试密码。例如,您可以禁用“提交”按钮,并仅在两个密码框的内容匹配时启用它。这样,在密码匹配之前,您的用户甚至不能单击Submit。文本框事件处理程序可能是执行测试的好地方,可以显示不匹配的错误消息,也可以启用“提交”按钮。

为什么要这样做?如果密码不匹配,则显示消息框并退出事件侦听器。然后,当用户再次单击该按钮时,它将再次触发侦听器,并检查密码是否再次匹配。这很有意义。谢谢你的反馈。