当我已经在按钮点击事件处理程序中时,如何等待提交按钮被点击
本文关键字:按钮 何等待 等待 提交 事件处理 程序 | 更新日期: 2023-09-27 18:08:29
- 用户提交表单
- 表单包含两个用于验证的密码字段
- 在SubmitButton_Click中,我使用do/while循环进行验证
-
如果密码不正确,我想在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以更早地测试密码。例如,您可以禁用"提交"按钮,只在两个密码框的内容匹配时才启用它。这样,在密码匹配之前,您的用户甚至无法单击"提交"。文本框事件处理程序可能是进行测试并显示不匹配错误消息或启用"提交"按钮的好地方。