我正在使用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;
}
}
答案 0 :(得分:2)
不要使用GetStream_UWP().Result
,您的代码将会死锁。
等待首先加载按钮,然后在GetStream_UWP()
上的等待加载事件中。
button.Loaded += async (s, e) => await GetStream_UWP();