c# - Xamarin Forms 等待图像被保存并显示
问题描述
我有个问题。我有一个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"
,你可以用它来显示/隐藏它。
如果您想在保存文件之前等待导航,只需这样做而不是显示/隐藏指示器。
推荐阅读
- python - 从外部向卷积输出添加另一层
- julia - 在 julia 中声明和更改变量值的问题
- php - 在 yii 框架中创建时插入的数据如何存储在数据库中?
- go - 递归打印树状结构的完整列表时遇到一些问题
- unix - 如何用 2 个单词创建 kotlin 中缀函数?
- python - 难以设置和使用 Flask_whooshalchemy
- xamarin.android - Visual Studio 2017 中 Xamarin.Android 项目中的可绘制文件夹替换为 mipmap 文件夹?
- node.js - 手动缩放模式下的应用引擎未完成长异步功能
- android - 如何以编程方式设置 EditText 布局边距?
- c# - C#如何关闭特定的监视器?