当我在Button Click事件处理程序中时,如何等待单击提交按钮?

时间:2015-08-18 01:47:10

标签: c# visual-studio-2015

  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);
        }
    }
    

1 个答案:

答案 0 :(得分:1)

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

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

问题是有一个专用于处理所有用户界面活动的线程 - UI线程。如果你在UI相关的事件处理程序中进行了太多处理 - 比如while (myReader.Read())循环 - 那么你就会占用UI线程,这意味着你的应用程序没有响应。

当您的应用在数据库代码中忙碌时,您的应用将无法响应其他点击(例如取消或关闭按钮)。

理想情况下,您需要将数据库处理卸载到另一个线程,然后从“提交”按钮处理程序启动该工作。搜索自适应用户界面以查找相关文章,例如Keep the UI thread responsive (XAML)

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