Как вызвать асинхронную не-лямбда-функцию на кнопке в Xamarin.Android

#c# #.net #xamarin #mobile-development

#c# #.net #xamarin #мобильная разработка

Вопрос:

Например, я уже написал некоторую асинхронную функцию и хочу вызвать ее при нажатии кнопки. Вот так:

 static async Task<string> ParseSth(string URL) { ... }
 

И я хочу вызвать ее, когда я нажимаю эту кнопку:

 FindViewById<Button>(Resource.Id.ButtonParse).Click  = ...
 

В Google или YouTube я нашел материал только о выражениях lamda. Итак, как это сделать?

Комментарии:

1. Вы можете сделать свой обработчик кликов асинхронным, а затем вызвать ParseSth оттуда с помощью await . Просто знайте, что любое исключение, вызванное вашим методом, не будет перехвачено, потому что вы добавляете асинхронность в метод void. Другим решением с некоторыми фреймворками MVVM может быть привязка асинхронной команды к нажатию кнопки.

2. Спасибо, я попробовал то, что вы сказали, и это работает нормально, не могли бы вы написать это в ответ на мой вопрос? Я хочу пометить это как ответ

Ответ №1:

Вы можете сделать свой обработчик кликов асинхронным, а затем вызвать ParseSth оттуда с помощью await . Просто знайте, что любое исключение, вызванное вашим методом, не будет перехвачено, потому что вы добавляете асинхронность в метод void.

 private async void button_Click(object sender, EventArgs e)
{
    await ParseSth(myTextBox.Text); // Any exception thrown here will be lost
}
 

Другим решением с некоторыми фреймворками MVVM может быть привязка асинхронной команды к нажатию кнопки.