我有问题。我有一个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);
}
}
但是现在我实际上要转到下一页。该页面包含一个图像,我要在其中显示保存的图像。首先,我在该页面上创建了一个ActivityIndicator:
<ActivityIndicator Color="Red" IsRunning="true" />
因此,我希望在加载图像时显示该图像。问题是我不知道如何检查图像是否已保存,因此我可以将其分配给该页面上图像的来源,然后删除ActivityIndicator。另外,我想在后台线程上运行图像保存,因此无需等待保存。
有人知道我该怎么做吗?
而不是使用data.SaveTo(stream)
,我可能会使用data.AsStream()
并在该流中使用异步方法将其复制到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"
,则可以使用它来显示/隐藏它。
如果要在保存文件之前等待导航,请执行此操作,而不是显示/隐藏指示器。