Não é possível aguardar 'void' [duplicado]

Nov 01 2020

este é o meu script.

        private async void secondmult_Click(object sender, EventArgs e)
        {
            var sct = sc;
            var secondmultx = secondmult;

            if (player.pcc == 100)
            {
                player.multiplier = 2;
                player.pcc = player.pcc - 100;
                secondmult.Enabled = false;
                sct.Text = player.pcc.ToString();
            }
            else if(player.pcc < 100)
            {
                sc.Text = "X";
                await Thread.Sleep(3000);
                sc.Text = player.pcc.ToString();
            }
            else if(player.pcc > 100)
            {
                player.multiplier = 2;
                player.pcc = player.pcc - 100;
                secondmultx.Enabled = false;
                sct.Text = player.pcc.ToString();
            }

Há um erro na linha 'await Thread.Sleep (3000);' Diz 'Não posso esperar' nulo '' Por favor, alguém pode refazer o script para mim para que funcione?

Respostas

1 sobby01 Nov 01 2020 at 06:49

Thread.sleep (3000) não está aguardando. Seu método é assíncrono, então a implementação ideal será aguardada por Task.Delay (3000)

Thread.Sleep vai bloquear seu thread atual e Task.Delay vai atrasar logicamente sem bloquear seu thread atual.

Thread.sleep não deve ser usado em operação assíncrona, em vez disso, devemos usar Task.Delay (3000) e vice-versa.

2 CoolBots Nov 01 2020 at 06:19

Thread.Sleep()não está à espera . Use em seu Task.Delay()lugar.