异步延迟在KeyDown事件中的e.handled

Enu*_*umy 1 c# asynchronous async-await

我们假设我们有这个:

private void Input_KeyDown(object sender, KeyEventArgs e)
{
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

然后我添加async-await这样的:

private async void Input_KeyDown(object sender, KeyEventArgs e)
{
    await Task.Delay(1000);
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

不应该这样做,但只延迟一秒钟?那为什么不呢?

注意:

我不是在寻求调试帮助,我只是想知道为什么我不能用它async-await来延迟处理KeyDown

Ste*_*ary 5

我只是想知道为什么我不能使用async-await来延迟处理KeyDown

根据定义,事件处理程序是同步的.因此,除非您的代码有办法通知事件处理程序它是异步行为(例如,WinStore样式的Deferral),否则它必须KeyEventArgs.Handled在它的第一个之前完成所有"通信"(例如)await.

如果您需要延迟输入,我建议您将代码转换为使用Reactive Extensions.