Как «ждать» поднятия события EventHandler
Иногда шаблон событий используется для вызова событий в приложениях MVVM или дочерней viewmodel, чтобы отправить сообщение своей родительской viewmodel в слабосвязанном виде, как это.
Parent ViewModel
searchWidgetViewModel.SearchRequest += (s,e) =>
{
SearchOrders(searchWidgitViewModel.SearchCriteria);
};
SearchWidget ViewModel
public event EventHandler SearchRequest;
SearchCommand = new RelayCommand(() => {
IsSearching = true;
if (SearchRequest != null)
{
SearchRequest(this, EventArgs.Empty);
}
IsSearching = false;
});
При рефакторинге моего приложения для .NET4.5 я стараюсь использовать как можно больше кодаasync
а такжеawait
, Однако следующее не работает (ну, я действительно не ожидал этого)
await SearchRequest(this, EventArgs.Empty);
Фреймворк определенно делает это для вызова обработчиков событийтакой как этот, но я не уверен, как он это делает?
private async void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Click Started";
await DoWork();
textBlock2.Text = "Click Finished";
}
Все, что я обнаружил по поводу асинхронного возбуждения событийявляется древний но я не могу найти что-то в рамках, чтобы поддержать это.
Как я могуawait
вызов события, но остается в потоке пользовательского интерфейса.