等待和异步不在Xamarin.UWP中工作

时间:2017-07-27 09:16:26

标签: uwp xamarin.forms cross-platform

我正在使用async和await来获取按钮的流。 async方法正常工作,当我使用await时,它返回函数。所以我总是在内存流中获取null值。

当我使用它时(等待renderTargetBitmap.RenderAsync(按钮))操作意味着它返回语句而不进行计算。

任何人,请建议我如何解决此问题?我是否需要添加任何其他代码?

这是我的代码:

 public class StreamDependencyService: IStreamDependency
{
    Button button;
    public Stream GetStream()
    {
        button = new Button() { Height = 50, Width = 50, Content = "Click" };
        return GetStream_UWP().Result;
    }
    public async Task<Stream> GetStream_UWP()
    {
        Stream memoryStream ;
        var renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(button);
        var pixels = await renderTargetBitmap.GetPixelsAsync();
        Guid encoderId = BitmapEncoder.JpegEncoderId;
        using (memoryStream = new MemoryStream())
        {
            var encoder = await BitmapEncoder.CreateAsync(encoderId, memoryStream.AsRandomAccessStream());
            encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitmap.PixelWidth,
                (uint)renderTargetBitmap.PixelHeight, 96.0, 96.0, pixels.ToArray());

            await encoder.FlushAsync();

        }
        return memoryStream;
    }
}

1 个答案:

答案 0 :(得分:2)

不要使用GetStream_UWP().Result,您的代码将会死锁。

等待首先加载按钮,然后在GetStream_UWP()上的等待加载事件中。

button.Loaded += async (s, e) => await GetStream_UWP();