Como "aguardar" a criação de um evento EventHandler
Às vezes, o padrão de evento é usado para gerar eventos nos aplicativos MVVM por meio de um viewmodel filho para enviar uma mensagem ao seu viewmodel pai de maneira fracamente acoplada como esta.
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;
});
Ao refatorar minha aplicação para .NET4.5, estou fazendo o máximo possível de código para usarasync
eawait
. No entanto o seguinte não funciona (bem, eu realmente não estava esperando isso)
await SearchRequest(this, EventArgs.Empty);
O framework definitivamente faz isso para chamar manipuladores de eventostal como este, mas não tenho certeza de como isso acontece?
private async void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Click Started";
await DoWork();
textBlock2.Text = "Click Finished";
}
Qualquer coisa que eu encontrei sobre o assunto de levantar eventos de forma assíncronaé antigo mas não consigo encontrar algo no framework para suportar isso.
Como possoawait
a chamada de um evento, mas permanecem no thread da interface do usuário.