我们都听说保持 UI 线程响应很重要,所以我们在任何地方实现 async/await。我正在构建一个文本编辑器,其中“一切”都是异步的。但是,现在我发现当代码在其他代码完成之前运行时,它会受到 UI 线程上的竞争条件的影响。当然,这就是“响应式 UI 线程”的全部思想,它可以运行代码,同时等待其他代码。我需要一些代码来等待其他代码在运行之前完成。我将问题归结为以下代码,我只是在其中处理击键:
private async void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
//Wait until it's your turn (await HandleKey has returned) before proceeding
await HandleKey(e.KeyChar);
}
async Task HandleKey(char ch)
{
await GetCaretPosition();
Point newPosition = await Task.Delay(1000);
await SetCaretPosition(newPosition);
}
正如您所看到的,当第一个键被处理(等待)时,下一个键可以开始处理。在这个简单的例子中,第二个键处理代码将获得一个旧的 caretposition 值,因为第一个键处理还没有更新 caretposition。如何让 KeyPress 事件中的代码等待第一个键完成处理?回到同步编码不是一种选择。
慕妹3242003
万千封印
相关分类