我使用async和await来获取按钮的流。异步方法工作正常,当我使用等待时,它返回function.So我总是在内存流中得到空值。
当我使用这个( await renderTargetBitmap.RenderAsync(button))操作时,意味着它返回语句而不进行计算。
任何人,请建议我如何解决这个问题?我需要添加任何其他代码吗?
这是我的代码:
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;
}
}发布于 2017-07-27 18:26:19
不要使用GetStream_UWP().Result,你的代码会死锁。
首先等待按钮加载,然后在已加载事件中,在GetStream_UWP()上等待。
button.Loaded += async (s, e) => await GetStream_UWP();https://stackoverflow.com/questions/45346378
复制相似问题