TextBox LostFocus-Event всегда вызывается до нажатия кнопки-события в .net? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий сценарий. Пользователь вводит количество в TextBox и нажимает кнопку для отправки. TextBox обновляет свою ViewModel на «LostFocus», и кнопка выполняет команду при нажатии. Чтобы усложнить ситуацию, оба события запускают асинхронные операции, которые синхронизируются с помощью SemaphoreSlim (данные должны обновляться в LostFocus перед выполнением команды). В очень немногих случаях я подозреваю, что Clicked-Event возникает до LostFocus. Это вообще возможно? Интересно, гарантируется ли, что событие FocusLost всегда вызывается до события нажатия кнопки в этом сценарии?

1 Ответ

0 голосов
/ 02 июля 2018

Согласно тестам, LostFocus запускается до события Clicked , однако, поскольку он асинхронный, есть вероятность, что Clicked обрабатывается до LostEvent закончено. Если вы хотите убедиться в порядке, вы можете использовать некоторые объекты синхронизации, такие как, например, асинхронная версия AutoResetEvent . Образец может выглядеть так:

AsyncAutoResetEvent resetEvent = new AsyncAutoResetEvent();

private async void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Starting lost focus");
    await Task.Delay(3000);
    resetEvent.Set();
    Debug.WriteLine("Leaving lost focus");
}

private async void Button_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Clicking button");
    await resetEvent.WaitAsync();
    Debug.WriteLine("Finishing with click event");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...