Реализуйте метод asnyc внутри потока - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над проектом Xamarin Forms в Visual Studio 2017. Мне нужно реализовать асинхронный метод внутри потока.

Событие, которое запускает поток

   public void btnAction_Click(object sender, System.EventArgs e)
    {
        var load = new System.Threading.Thread((t) =>
        {
           ShowWarning();

        });
        load.Start(btnText);

    }

Асинхронный метод должен реализовываться внутри потока

 private async void ShowWarning()
 {
       bool response = await  DisplayAlert("Warning", "Please Enter
                            The Key","Yes","No");
 }

1 Ответ

0 голосов
/ 07 мая 2018

Если DisplayAlert действительно асинхронный , почему вы вообще запускаете поток? Вы можете объявить ваш обработчик событий async и просто awiat ShowWarning:

public async void btnAction_Click(object sender, System.EventArgs e)
{
    await ShowWarning();
}

Возможно, вы захотите отключить btnAction до await и снова включить его после await, чтобы избежать повторного события щелчка во время ожидания.


И обратите внимание, что объявлять ShowWarning как async void плохой практикой. Должно быть

private async Task ShowWarning()
{ ... }

(В случае обработчика события кнопки можно вернуть async void, потому что в противном случае вы не могли бы присвоить его событию).


Если вам действительно нужно запустить ShowWarning в другом потоке, вы можете использовать Task.Run():

public async void btnAction_Click(object sender, System.EventArgs e)
{
    await Task.Run(ShowWarning);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...