任务返回类型错误

14

发生了什么问题?如何修复?我正在尝试学习C#中的一个新主题-task。当我运行代码时,我收到以下错误信息: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>

1
你的按钮点击事件中没有Task。只需要使用async即可,它是一个事件处理程序,不返回任何内容。 - Jimi
可能是Should I avoid 'async void' event handlers?的重复问题。 - habib
4个回答

38

按钮单击事件是少数几个可以使用 async void 方法签名的情况。将您的方法更改为如下所示:

public async void btn1_ClickAsync(object sender, RoutedEventArgs e)

你应该没问题了。


1
是的,谢谢,它可以工作,但我们需要确保在ASP.NET页面上标记了<%@ Page Async="true" %>。 - Abdu Imam

8

事件处理程序需要是async void方法:

public async void btn1_ClickAsync(object sender, RoutedEventArgs e)

4

由于它是一个事件处理程序,所以应该使用 async void

public async void btn1_ClickAsync(object sender, RoutedEventArgs e)

请注意,async void是一个特殊情况,通常应该避免使用。有关详细信息,请参见异步/等待 - 何时返回任务而不是空值?

3

WPF事件通常是RoutedEventHandler,即它们的签名为void RoutedEventHandler(object sender, RoutedEventArgs e)。因此,您的btn1_ClickAsync与之不匹配,因此会出现错误消息。

您可以使用public async void btn1_ClickAsync(...)来修复它。事件处理程序也是您可能会使用async void函数的唯一时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接