当我已经在按钮点击事件处理程序中时,如何等待提交按钮被点击

本文关键字:按钮 何等待 等待 提交 事件处理 程序 | 更新日期: 2023-09-27 18:08:29

  1. 用户提交表单
  2. 表单包含两个用于验证的密码字段
  3. 在SubmitButton_Click中,我使用do/while循环进行验证
  4. 如果密码不正确,我想在do循环中等待再次单击提交按钮。

        // 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按钮处理程序开始这项工作。搜索Responsive UI以查找相关文章,如保持UI线程响应(XAML(。

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