Попытка запустить диалог после задачи bool, приложение зависает - PullRequest
0 голосов
/ 18 сентября 2018

Когда я использую результат асинхронной задачи внутри кнопки bool, приложение застревает

async Task<bool> task1()
{
    await Task.Run(() =>
    {
        for (int a = 0; a <= 1000000000; a++)
        {

        }
    });
    return true;
}

private  void Start_Click(object sender, EventArgs e)
{
    setDialog(true);
    if (task1().Result==true)
      setDialog(false);
}

private void setDialog(bool show)
{

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.SetView(Resource.Layout.layout1);
    Dialog dialog = builder.Create();
    dialog.SetCancelable(false);
    if (show) dialog.Show();
    else dialog.Dismiss();
}

Когда я нажимаю кнопку пуска, мое приложение застревает и не позволяет мне что-либо делать.Если я буду использовать задачу внутри события кнопки, то все будет хорошо

1 Ответ

0 голосов
/ 18 сентября 2018

Вы заблокировали свое приложение. Это: task1().Result ожидает синхронно и побеждает цель задач. Используйте вместо этого async / await:

private async void Start_Click(object sender, EventArgs e)
{
    setDialog(true);
    var result = await task1();
    if (result)
      setDialog(false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...