Jak „czekać” na podniesienie zdarzenia EventHandler
Czasami wzorzec zdarzeń jest używany do wywoływania zdarzeń w aplikacjach MVVM przez lub podrzędny model widoku, aby wysłać wiadomość do swojego macierzystego modelu widoku w sposób luźno powiązany.
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;
});
W refaktoryzacji mojej aplikacji dla .NET4.5 robię tyle, ile można użyć koduasync
iawait
. Jednak poniższe nie działa (cóż, naprawdę tego nie oczekiwałem)
await SearchRequest(this, EventArgs.Empty);
Ramy zdecydowanie robią to, aby wywołać procedury obsługi zdarzeńtak jak to, ale nie jestem pewien, jak to robi?
private async void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Click Started";
await DoWork();
textBlock2.Text = "Click Finished";
}
Wszystko, co znalazłem na temat poruszania wydarzeń asynchroniczniejest starożytny ale nie mogę znaleźć niczego w ramach, aby to wesprzeć.
Jak mogęawait
wywołanie zdarzenia, ale pozostanie w wątku interfejsu użytkownika.