Xamarin Forms 等待图像保存并显示

Xamarin Forms Wait for image to be saved and show it

我有问题。我有一个 skiasharp,当我单击一个按钮时,我将其转换为 png。 这是相关代码:

async void OnButtonClicked(object sender, EventArgs args)
{
    using (var image = args.Surface.Snapshot())
    using (var data = image.Encode(SKEncodedImageFormat.Png, 80))
    using (var stream = File.OpenWrite(Path.Combine("MyApp.TempImages", "1.png")))
    {
        data.SaveTo(stream);
    }
}

但现在我真的想转到下一页。该页面包含一个图像,我想在其中显示保存的图像。首先,我在该页面上创建了一个这样的 ActivityIndi​​cator:

<ActivityIndicator Color="Red" IsRunning="true" />

所以我希望在加载图像时显示它。 问题是我不知道如何检查图像是否已保存,因此我可以将其分配给该页面上图像的来源并删除 ActivityIndi​​cator。另外,我想 运行 在后台线程上保存图像,这样我就不必在保存之前等待。

有人知道我该怎么做吗?

我可能会使用 data.AsStream() 而不是使用 data.SaveTo(stream) 并使用该流中的异步方法将其复制到 FileStream。这样您就可以在该操作前后切换 ActivityIndicator 的可见性。所以像:

async void OnButtonClicked(object sender, EventArgs args)
{
    // Show ActivityIndicator here

    using (var image = args.Surface.Snapshot())
    using (var data = image.Encode(SKEncodedImageFormat.Png, 80))
    using (var stream = File.OpenWrite(Path.Combine("MyApp.TempImages", "1.png")))
    {
        var dataStream = data.AsStream();
        await dataStream.CopyTo(stream);
        await stream.FlushAsync();
    }

    // Hide ActivityIndicator here
}

如果你给你的ActivityIndicator一个名字x:Name="Indicator",你可以用它来show/hide它。

如果您想在保存文件之前等待导航,只需这样做而不是 showing/hiding 指示器。