c# - Xamarin 中的异步按钮事件

标签 c# xaml xamarin.forms

我正在尝试使用 Xamarin Forms 媒体插件。我在尝试获取我的按钮时被绊倒了,在我的 MainPage.XAML 文件中调用我的 MainPage.Xaml.CS 文件中的异步函数。

代码的第一行给我带来了问题:takePhoto.Clicked += async (sender, args) =>

“拍照”是我的 app.xaml 文件中按钮的名称,但无论我尝试什么,我似乎都无法在我的 app.xaml.cs 中获取我的按钮名称,所以我不知道如何调用这个异步函数。

这是库用来使用插件拍照的代码——这段代码在我的 App.Xaml.CS 文件中:

takePhoto.Clicked += async (sender, args) =>
{
    await CrossMedia.Current.Initialize();

    var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
    {
        Directory = "Sample",
        Name = "test.jpg"
    });

    if (file == null)
        return;

    image.Source = ImageSource.FromStream(() =>
    {
        var stream = file.GetStream();
        file.Dispose();
        return stream;
    }); 
};

我的按钮在 App.Xaml 页面中,如下所示:

<Button ClassId="TakePicture"
         Text="Take Picture"
         Margin="100" 
         HorizontalOptions="CenterAndExpand"
        />

这可能是一个简单的问题。通常我会在上面截取的代码中添加 Clicked = callFunction() 属性,但如果函数是异步的,我不知道该怎么做。如果有任何指导,我将不胜感激。

最佳答案

你想多了 - 只需在处理程序签名中使用 async 关键字,而不是在 XAML 中

<Button ClassId="TakePicture"
     Clicked="TakePhoto"
     Text="Take Picture"
     Margin="100" 
     HorizontalOptions="CenterAndExpand"
    />

然后在后面的代码中

protected async void TakePhoto(object sender, EventArgs a)
{
  ...
}

关于c# - Xamarin 中的异步按钮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63134633/

相关文章:

wpf - 覆盖自定义样式的属性

xamarin - xamarin 形式的 Picker 控件中的字体大小

xamarin - 在skiasharp中加载字体

c# - 如何从 XML 序列化程序集中排除一个类

C# 枚举 DataMember 在 WCF 中更改其值

silverlight - 有没有办法以编程方式更改 Silverlight 中的数据/项目模板?

c# - map 别针从未在我的 android 中绘制(xamarin 表单)

c# - 来自 Xamarin 应用程序的第二次 api 调用失败(第一次调用总是返回正常)

c# - Entity Framework 4.1 POCO - 多对多加载

c# - 以编程方式将 TextBlock 添加到 DataTemplate