Задача имеет неправильный тип возврата - PullRequest
0 голосов
/ 26 августа 2018

Что не так? и как это исправить ?? Я пытаюсь выучить новый предмет в c # -задаче. и когда я бегу, я получаю сообщение об ошибке: Error CS0407 'Task MainWindow.btn1_ClickAsync(object, RoutedEventArgs)' has the wrong return type

 public async Task btn1_ClickAsync(object sender, RoutedEventArgs e)
            {
                txtState.Text = "btn1_Click started";
               await LongRunningFunc1();
                txtState.Text = "btn1_Click finished";

            }

        private async Task LongRunningFunc1()
        {
            txt1.Text = "Processing 1 .....";
            btn1.Content = "Wait";
            await Task.Delay(5000);
            txt1.Text = "Hello From Func1";
            btn1.Content = "Click";
        }

Дизайнер wpf:

<Grid>
        <TextBlock Name="txtState" Margin="265,10,274,356"/>
        <TextBlock Name="txt1" Height="50" RenderTransformOrigin="0.966,-0.95" Margin="281,68,320,301"/>
        <TextBlock Name="txt2" Height="50" Margin="253,238,274,131" />
        <Button Name="btn1" Background="Red" Margin="281,127,300,208" Click="btn1_ClickAsync"></Button>
        <Button Name="btn2" Background="Aqua" Margin="298,309,311,27"></Button>
    </Grid>

Ответы [ 4 ]

0 голосов
/ 26 августа 2018

WPF-события обычно RoutedEventHandler, т.е. они имеют подпись void RoutedEventHandler(object sender, RoutedEventArgs e).Ваш btn1_ClickAsync не соответствует этому, поэтому сообщение об ошибке.

Вы можете исправить это с помощью public async void btn1_ClickAsync(...).Обработчики событий также являются единственным случаем, когда вы используете функцию async void.

0 голосов
/ 26 августа 2018

Обработчики событий должны быть async void методы:

public async void btn1_ClickAsync(object sender, RoutedEventArgs e)
0 голосов
/ 26 августа 2018

События нажатия кнопки - одна из немногих сигнатур методов, где async void допустимо. Измените свой метод на

public async void btn1_ClickAsync(object sender, RoutedEventArgs e)

и с тобой все будет в порядке.

0 голосов
/ 26 августа 2018

Поскольку это обработчик событий, он должен быть async void

public async void btn1_ClickAsync(object sender, RoutedEventArgs e)

Обратите внимание, что это противоречит всем (фактически большинству) правилам асинхронизации / задач. См. async / await - когда возвращать Task vs void? для получения подробной информации.

...