可以将void返回给TapGestureRecogniser发起的方法吗?

时间:2019-05-28 06:45:26

标签: xamarin xamarin.forms

我有针对Button.xaml的XAML:

<Frame xmlns="http://xamarin.com/schemas/2014/forms" 
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
                  xmlns:t="clr-namespace:Japanese.Templates" 
                  xmlns:local="clr-namespace:Japanese;assembly=Japanese" 
                  x:Class="Japanese.Templates.Button" x:Name="this" 
                  VerticalOptions="FillAndExpand"
                  HeightRequest="{DynamicResource GridButtonHeight}" >
<Frame.GestureRecognizers>
    <TapGestureRecognizer Command="{Binding TapCommand, Source={x:Reference this}}" 
                          CommandParameter="{Binding ., Source={x:Reference this}}" />
    <TapGestureRecognizer Tapped="ChangeTheColours" />
</Frame.GestureRecognizers>
<Label Text="{Binding Text, Source={x:Reference this}}" x:Name="ButtonLabel" />
</Frame>

以及我的Button.xaml.cs应用程序中的此C#

    private async void ChangeTheColours(Object sender, EventArgs e)
    {
        try
        {
            if (this.ButtonLabel.Text != null && (string)this.ButtonLabel.Text.Substring(0, 1) != " ")
            {
                ConfigureColors((Button)sender, "C");
                await Task.Delay(200);
                ConfigureColors((Button)sender, State);
            }
        }
        catch (Exception ex)
        {
            Crashes.TrackError(ex,
                new Dictionary<string, string> {
                        {"ChangeTheColours", "Exception"},
                        {"Device Model", DeviceInfo.Model },
                });
        }
    }

在此示例中,可以为异步方法返回void吗?还是有要求我应返回Task的要求?

1 个答案:

答案 0 :(得分:2)

由于这是一个事件,因此无法将其转换为Task

当您检查Microsoft Docs时:

  

事件是使对象或类提供通知的成员。客户端可以通过提供事件处理程序来附加事件的可执行代码。

     

使用event_declarations声明事件

当您阅读最后一条声明时,它会说:

  

每个访问器对应于一个方法,该方法具有事件类型的单个值参数,无效返回类型以及与包含事件相同的修饰符。