如果密码不正确,我想在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);
}
}
答案 0 :(得分:1)
正如@MikeD在评论中所说,您不想等待事件处理程序中的按钮单击。
您也不希望在事件处理程序中执行所有数据库处理。
问题是有一个专用于处理所有用户界面活动的线程 - UI线程。如果你在UI相关的事件处理程序中进行了太多处理 - 比如while (myReader.Read())
循环 - 那么你就会占用UI线程,这意味着你的应用程序没有响应。
当您的应用在数据库代码中忙碌时,您的应用将无法响应其他点击(例如取消或关闭按钮)。
理想情况下,您需要将数据库处理卸载到另一个线程,然后从“提交”按钮处理程序启动该工作。搜索自适应用户界面以查找相关文章,例如Keep the UI thread responsive (XAML)。
您可能还会考虑更改UI以更早地测试密码。例如,您可以禁用“提交”按钮,仅在两个密码框的内容匹配时启用它。这样,在密码匹配之前,您的用户甚至无法单击“提交”。文本框事件处理程序可能是进行测试并显示不匹配错误消息或启用“提交”按钮的好地方。