在.net中,始终在出现TextClick LostFocus-Event总是在按钮Click-Event之前引发事件吗?

时间:2018-07-02 12:43:25

标签: c# .net xaml uwp

我有以下情况。用户在文本框中输入数量,然后单击按钮提交。文本框在“ LostFocus”上更新其ViewModel,并且按钮在单击时执行命令。为了使事情变得更复杂,两个事件都触发了异步操作,这些操作通过SemaphoreSlim进行了同步(在执行命令之前,应在LostFocus上更新数据)。在极少数情况下,我怀疑Clicked-Event在LostFocus之前引发。那有可能吗?我想知道在这种情况下是否可以保证在单击按钮事件之前总是引发FocusLost事件?

1 个答案:

答案 0 :(得分:1)

根据测试, Clicked 事件之前会触发 LostFocus ,但是由于它是异步的,因此有可能在之前处理 Clicked LostEvent 完成。如果要确保顺序,可以使用一些同步对象,例如async version of 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");
}