A有一个简单的文本框,我等待验证处理程序内的延迟任务。始终调用Validated处理程序,与是否e.Cancel = true
无关!请注意,如果我省略了await调用,则会按预期进行验证。为什么会这样?
private async void textBox1_Validating(object sender, CancelEventArgs e)
{
await Task.Delay(2000);
e.Cancel = true;
}
private void textBox1_Validated(object sender, EventArgs e)
{
MessageBox.Show("THIS WILL ALWAYS BE CALLED!");
}
答案 0 :(得分:4)
一旦事件完成调用所有事件处理程序,触发事件的代码将检查e.Cancel
的值。由于您的代码最终从事件处理程序返回,然后在稍后的时间点更改e.Cancel
的值,因此触发事件处理程序的代码已经很久才完成检查{ {1}}并确定在您更改值时验证是否成功。